【发布时间】:2012-02-05 09:09:48
【问题描述】:
我对 C++ 内存管理相当陌生。我读了Should every class have a virtual destructor? 并找到了这个答案:
每个抽象类都应该有一个
- 受保护的析构函数或
- 虚拟析构函数
如果您有一个公共的非虚拟析构函数,那就不好了,因为它允许用户通过该指针删除派生对象。众所周知,这是未定义的行为。
对于不打算通过指向它的指针删除的类,没有任何理由拥有虚拟析构函数。这不仅会浪费资源,更重要的是会给用户一个错误的提示。想想给 std::iterator 一个虚拟析构函数会有什么糟糕的意义。
所以我现在有一个受保护的析构函数(我不是从类派生的)。
虽然我有一个指向该对象的指针,但在另一个类中。在我的构造函数中,我给指针一个该类的“新”对象,在我的 destrcutor 中我想销毁它。
我该怎么做?如果析构函数没有受到保护,我会遇到段错误(我不完全理解,但我意识到无论如何都是糟糕的编程)。如果析构函数受到保护,我不知道如何删除该对象。
【问题讨论】:
标签: c++ pointers constructor protected