我如何*不*删除析构函数中的成员?

Joe*_*Joe 6 c++ destructor ownership-semantics

我希望我的类的析构函数删除整个对象,除了其中一个成员,在其他地方删除.首先,这是完全不合理的吗?假设不是,我该怎么做?我认为创建一个带有空体的析构函数会阻止所有成员被删除(因为析构函数不会做任何事情),但似乎并非如此.

dmc*_*kee 15

简短的回答:你没有.

更长的答案:如果"成员"实际上是指向其他一些分配的指针,则可以安排不删除其他分配.

但通常,如果在构造函数中分配了另一个块,则需要在析构函数中删除它.其他任何事情都需要仔细处理相关区块的"所有权".这很像普通c中的内存管理.可能,但充满危险.

祝好运.


Tod*_*ner 10

取决于"删除"的含义.如果它们不在智能指针中,并且未明确删除,则不会删除它们.仅属于该课程的成员:

class Bar {
//...
private: 
  Foo foo;
};
Run Code Online (Sandbox Code Playgroud)

不会被析构函数删除(因为它们没有动态分配),它们只是被销毁了.他们在课堂上"活着",所以一旦它被摧毁,它就消失了.

如果您正在查看两个位置之间的共享"所有权",您想要的是动态分配的shared_ptr:

#include <memory>
class Bar {
// ...
private:
  std::tr1::shared_ptr<Foo> foo;
};
Run Code Online (Sandbox Code Playgroud)