【发布时间】:2013-07-03 09:12:08
【问题描述】:
我想知道如何编写运算符= 以便释放变量上现有分配的内存。
例如,在下面的代码中,当重新分配x 指针x = new ClassExample(4) 时,旧的x->a 内存将被释放。
显然,当使用new 时,运算符= 不适用(它仅适用于已经存在的 值)。
有什么方法可以做到这一点(分配新内存时释放旧内存)?
#include <iostream>
#include <cstdlib>
class ClassExample {
public:
int* a;
ClassExample& operator= (const ClassExample& rightSide) {
//.....
}
ClassExample(int val) {
a = new int(val);
}
};
int main()
{
ClassExample* x = new ClassExample(2);
x = new ClassExample(4);
return 0;
}
【问题讨论】:
-
在这种情况下不会调用您的赋值运算符,因为您使用的是指针而不是直接实例。还要记住,分配的内存永远不会自动释放,你必须这样做。使用 smart pointers 会有所帮助。
-
其实在这种情况下,为什么你要使用指针呢?我不仅指
main中的ClassExample指针,还指类中的成员指针a!您应该遵循的规则是: 1. 不要使用指针。 2.如果你必须使用指针,不要。 3.如果你仍然必须使用指针,那么使用智能指针。 -
也要考虑异常安全