我以前見過這個問題,但並不清楚,或者與我遇到過的情況相同。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