对不起我inattension,总之~CSArray()
是工作,但接口和实现类有不同的文件,因此错误是在这里析构函数永远不会被调用
回答
显示的代码目前太短而无法看到问题。
一些很好的建议:永远不要建立自己的引用计数方案。使用经过验证的库实现,如std :: auto_ptr,boost :: shared_ptr或boost :: shared_array,并利用RAII(http://en.wikipedia.org/wiki/RAII)。 另外,请避免像鼠疫一样“删除这个”。它在某些情况下似乎有效,但通常前/后条件太多。
在尝试引用计数之前研究'delete this'的条件是个好主意,但引用计数既不复杂也不困难,正如大量COM组件所证明的那样,所有这些组件都实现'IUnknown'。另外,您建议的类不是线程安全的,因此“重用库版本”可能会造成很大的麻烦。 – 2010-08-03 12:07:34
@Ben:而且OP的代码是线程安全的?另见http://stackoverflow.com/questions/692438/is-boost-shared-ptr-xxx-thread-safe – UncleBens 2010-08-03 16:15:10
马库斯,我喜欢可可风格,所以我让他们 – Ariel 2010-08-03 18:07:33
假设_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;
}
结果:W/O明确删除
A ctor
B ctor
B dtor
A dtor
结果:与明确的删除
A ctor
B ctor
B dtor
A dtor
B dtor
A dtor
我不太清楚你的意思通过“完美的作品”;删除一个自动变量会导致一个未定义的行为,并且很可能会崩溃,导致您获得双重破坏。 – 2010-08-03 12:16:10
@Mike Seymour我只是为了证明析构函数被调用。那么我应该删除单词“完美”:) ...我在这里没有考虑UB ... – KedarX 2010-08-03 12:28:50
- 1. onreadystatechange函数永远不会被调用
- 2. 解析User.Login永远不会被调用?
- 3. Xml解析器函数永远不会被调用
- 4. Android的ListArrayAdapter构造函数永远不会被调用
- 5. 析构函数不会被调用
- 6. dylib析构函数不会被调用
- 7. WCF回调实现函数永远不会被调用
- 8. OnLocationChanged回调永远不会被调用
- 9. System.Threading.Timer回调永远不会被调用
- 10. touchesBegan函数永远不会被输入
- 11. 解析:[PFFVideosUtils reauthorizeUser:]回调永远不会被调用
- 12. Pthread循环函数永远不会被调用
- 13. contactPickerDidCancel和contactPicker函数永远不会被调用
- 14. jquery拖放问题:drop()函数永远不会被调用
- 15. Android,适配器中的函数永远不会被调用
- 16. 为什么函数“onaddstream”永远不会被调用?
- 17. RxScala ConnectableObservable.doOnSubscribe永远不会被调用?
- 18. DragEvent.ACTION_DROP永远不会被调用
- 19. 星火:onApplicationStart永远不会被调用
- 20. asp.net MvcHandler.ProcessRequest永远不会被调用
- 21. kubernetes的ScheduledJob永远不会被调用
- 22. Restkit onDidFailWithError永远不会被调用
- 23. ON_CANCEL永远不会被调用
- 24. Android onSystemUiVisibilityChange永远不会被调用
- 25. OnModelCreating永远不会被调用
- 26. CAAnimationDelegate代表永远不会被调用
- 27. 我的onActivityResult()永远不会被调用
- 28. Qt的nativeEvent()永远不会被调用
- 29. OnActivityResult永远不会被调用
- 30. Icefaces 3.0.1 FileEntry:FileEntryListener永远不会被调用
确定保留/释放计数是否匹配? – Lothar 2010-08-03 09:59:21
保留计数实际上是否达到零?是否调用了'CSObject'的析构函数? CSObject的析构函数是虚拟的吗? ' – 2010-08-03 10:13:45
来自调试器, '保留计数是否实际达到零?是 '是否调用了CSObject的析构函数?'是 'CSObject的析构函数是虚拟的吗?'是 CSArray的析构函数未被调用 – Ariel 2010-08-03 10:22:44