删除运算符中未使用的对象=重载

Deleting non used objects in operator= overloading

本文关键字:对象 重载 未使用 运算符 删除      更新时间:2023-10-16

假设我有一个类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);

在这种情况下,创建的新对象没有被删除,我失去了它的引用。所以我可以在运算符=重载函数中放入删除对象的指令,这是赋值的正确值,但如果我这样做:

A obj1,obj2;
obj1=obj2;

那么如何避免浪费内存呢?有办法吗?

@Oli Charlesworth:但是迭代器是如何实现的呢?例如,在std::list中,如果我说:

list<string> l;
// initialize the list elements
list<string>::iterator i=l.begin();

这是一个赋值,是否创建了另一个类型对象列表:迭代器?

是的,解决方案是不执行obj = *new A(5)。只需执行obj = A(5)


BTW,您的副本分配运算符应将其参数作为const参考。

这是一个可怕的想法:

obj=*new A(5);

这不允许您再破坏参考CCD_ 4。相反,直接初始化或通过赋值运算符A& operator= (const A& other):进行初始化

A obj(5);
A obj;
obj = A(5);

你绝对应该学习"三条规则",这样你就不会出现记忆力问题。