我对C ++内存管理还不熟悉。我看了Should every class have a virtual destructor?并找到了答案:
每个抽象类都应该有
- 受保护的析构函数或
- 虚拟析构函数
如果你有一个公共非虚拟析构函数,那就不好了,因为它允许用户通过该指针删除派生对象。因为我们都知道,这是未定义的行为。
对于不打算通过指向它的指针删除的类,没有任何理由拥有虚拟析构函数。它不仅会浪费资源,更重要的是它会给用户一个错误的提示。试想一下,给std :: iterator一个虚拟的析构函数会产生什么样的糟糕感。
所以我现在有一个受保护的析构函数(我不是从类派生的)。
在另一个类中虽然我有一个指向这个对象的指针。在我的构造函数中,我使指针成为该类的“新”对象,在我的描述符中我想要将其销毁。
我该怎么做?如果析构函数没有受到保护,我会遇到一个seg错误(我不完全理解,但我知道编程错误)。如果析构函数受到保护,我不知道如何删除对象。
答案 0 :(得分:3)
您在上面的块中缺少“abstract”一词。 “抽象”是指你不应该拥有该课程的对象。如果你有一个类的对象,它应该几乎总是有一个公共析构函数。