c++ - 删除 operator= 重载中未使用的对象

标签 c++

假设我有一个 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/

相关文章:

c++ - 为什么初始化列表初始化需要堆分配数组的大小?

c++ - C++11 是否改变了显式调用 std::swap 以确保找到位于 ADL 的交换的行为,例如 boost::swap?

c++ - 在 C++ 中模拟确定性下推自动机 (PDA)

c++ - QSerialPort 无法在 Ubuntu 上打开 "/dev/ttyUSB0"

c++ - unordered_map/unordered_set 中元组的通用哈希

c++ - 初始化成员结构的正确方法

c++ - linux x64 c++ 为链表分配了太多内存;为什么?

c++ - bazel c++ 创建并链接共享库

带有 libtcod 的 C++ 不允许 TCODColor 类型声明

c++ - 与组合相比,为什么私有(private)继承会增加有人破坏我的代码的可能性?