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