删除运算符中未使用的对象=重载
Deleting non used objects in operator= overloading
假设我有一个类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);
你绝对应该学习"三条规则",这样你就不会出现记忆力问题。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 运算符重载 += 添加新对象
- 有没有办法将重载的类函数绑定到函数对象?
- 使用操作重载对象重新分配对象
- C++内联运算符重载中,请参阅当前对象
- C++运算符重载做双 * 对象
- 尝试重载输出运算符时,我无法遍历对象向量
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 重载加法运算符(使用函数向对象添加字符串)
- 临时对象上的运算符重载
- 如何使用运算符+重载函数正确返回对象?
- 对象内部对象的重载功能
- 重载运算符 [] 用于从对象数组中给出特定索引
- 流入流 (>>) 和流出 (<<) 对象重载
- 如何为我的对象重载 cout
- 删除运算符中未使用的对象=重载
- 用模板对象重载容器类的操作符[]