【发布时间】:2023-03-30 00:35:02
【问题描述】:
我以前见过这个问题,但不清楚或与我遇到的情况相同。
我有一个抽象基类。它有一个受保护的构造函数和一个析构函数。它被几个完整的类型继承,这些类型也有公共的构造函数和析构函数。如果对象被基类型引用,我遇到的问题是删除对象不会调用子析构函数。
class Tree
{
protected:
Tree(){ }
public:
~Tree(){ }
};
class OakTree : public Tree
{
public:
OakTree(){ }
~OakTree(){ }
};
vector<Tree*> Trees; // Store objects using the base type
Trees.push_back(new OakTree()); // Create derived object
delete Trees[0]; // OakTree desctructor does not get called
如何调用 OakTree 析构函数?我尝试将所有析构函数标记为虚拟,但没有奏效。基类析构函数不能是抽象的(这样可以解决调用问题,但不能解决删除问题)。
【问题讨论】:
-
抱歉,我在其中一个析构函数中出现错误,导致它在我的内存转储中显示内存泄漏,这让我认为没有调用析构函数。在这种情况下,我 99% 确定析构函数应该是虚拟的,但我将它们设置为虚拟的,但这并没有解决我的内存泄漏问题。我粗心大意,但为您的回答 +1。
标签: c++ inheritance c++11