我以前见过这个问题,但并不清楚,或者与我遇到过的情况相同。C++非抽象析构函数继承
我有一个抽象基类。它有一个受保护的构造函数和一个析构函数。它由几个完整类型继承,这些类型也具有公共构造函数和析构函数。我遇到的问题是,如果对象被基类型引用,那么删除对象不会调用子析构函数。
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。 – 2014-11-04 16:14:42