【发布时间】:2009-10-23 06:54:48
【问题描述】:
如何在下面的代码中允许使用私有析构函数删除对象?我已将实际程序简化为以下示例,但它仍然可以编译和工作。
class SomeClass;
int main(int argc, char *argv[])
{
SomeClass* boo = 0; // in real program it will be valid pointer
delete boo; // how it can work?
return -1;
}
class SomeClass
{
private:
~SomeClass() {}; // ! private destructor !
};
【问题讨论】:
-
有趣..如果我将类的定义移到 main() 上方,则会引发编译器错误。否则,我只会得到一个
warning C4150: deletion of pointer to incomplete type 'SomeClass'; no destructor called -
@Naveen:这是意料之中的。不完整的类型是一个问题。私有析构函数是另一个。每个都有自己的诊断信息。您可以通过移动
SomeClass的定义在两者之间切换。
标签: c++ memory-management private-members