析构函数永远不会被调用

时间:2010-08-03 09:57:46

标签: c++

对不起我的干预,简而言之,~CSArray()是可行的,但是类的接口和实现存在于不同的文件中,所以错误就在这里

3 个答案:

答案 0 :(得分:4)

确保在基类中声明了析构函数virtual

答案 1 :(得分:2)

显示的代码目前太短,无法查看问题。

一些好建议:永远不要建立自己的引用计数方案。使用经过验证的库实现,如std :: auto_ptr,boost :: shared_ptr或boost :: shared_array,并利用RAII(http://en.wikipedia.org/wiki/RAII)。 另外,避免像瘟疫一样“删除这个”。它似乎在某些情况下有效,但通常前/后条件太多了。

答案 2 :(得分:2)

假设_retainCount = 0

如果你在基类中声明了析构函数virtual,它就可以工作。

见下面的代码:(gcc 3.4.3版)

#include<iostream>
using namespace std;

class A
{
    public:
        A(){cout<<"A ctor"<<endl;};
        virtual ~A(){cout<<"A dtor"<<endl;};
        void testDel()
        {
            delete this;
        }
};

class B: public A
{
    public:
        B(){cout<<"B ctor"<<endl;};
        ~B(){cout<<"B dtor"<<endl;};
};

int main()
{
    B bObj;

    bObj.testDel(); 
   return 0; 
}

结果:没有显式删除

A ctor
B ctor
B dtor
A dtor

结果:显式删除

A ctor
B ctor
B dtor
A dtor
B dtor
A dtor