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)
归档时间: |
|
查看次数: |
1323 次 |
最近记录: |