【发布时间】:2014-04-18 00:24:01
【问题描述】:
我想用指针分配一个对象,而不调用 rhs 对象的析构函数。 或者可能是另一种解决方案 这样可以提醒人们 free 没有被调用。 我不想复制指针中的所有内容 因为里面可以有很多。
有没有办法做到这一点 还是我只需要记住调用 free()?
class Stuff {
public:
Stuff(SomeObj *pointer) {
this->pointer = pointer;
}
~Stuff() {
if(pointer) {
cout << "forgott to free pointer" << endl;
free();
}
}
void free() {
if(pointer) {
delete pointer;
pointer = NULL;
}
}
Stuff& operator=(const Stuff &rhs) {
if(pointer) {
cout << "forgot to free before assigning" << endl;
free();
}
return *this;
}
private:
SomeObj *pointer;
}
Stuff getStuff() {
Stuff stuff(new SomeObj(...));
return stuff;
}
int main() {
Stuff stuff = getStuff();
stuff = getStuff(); // rhs destructor is run destroying pointer
return 0;
}
【问题讨论】:
-
查看 std::shared_ptr 或 boost::shared_ptr (更好:只使用其中之一)
-
如果 c++11 然后使用移动语义。正如 DieterLücking 指出的那样,否则不会返回临时而是 smart_pointers。
-
好的,谢谢。 shared_ptr 看起来应该可以工作,但是我会假设其他一些问题与 mingw32 有关系