假设我有一个 A 类:
class A
{
private:
int value;
public:
A(int value)
{
this->value=value;
}
A& operator= (A& obj)
{
value=obj.value;
}
};
如果我使用上下文实例化会出现问题:
A obj;
obj=*new A(5);
在这种情况下,创建的新对象没有被删除,我失去了它的引用。 所以我可以在 operator= 重载函数中放入删除对象的指令,这是赋值的正确值,但是如果我这样做:
A obj1,obj2;
obj1=obj2;
那么如何避免浪费内存呢?有办法吗?
@奥利查尔斯沃思: 但是迭代器是如何实现的呢?例如在 std::list 中,如果我说:
list<string> l;
// initialize the list elements
list<string>::iterator i=l.begin();
这是一个赋值,是否创建了另一个 list::iterator 类型的对象?
最佳答案
是的,解决方案是不执行 obj = *new A(5)
。只需执行 obj = A(5)
。
顺便说一句,您的复制赋值运算符应将其参数作为
const
引用。
关于c++ - 删除 operator= 重载中未使用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248841/