中国开发网: 论坛: 程序员情感CBD: 贴子 479232
李战
这个我明白,但我的意思是说
在C++里这是肯定的:一个对象构造不成功,不会调用该对象的析构函数!
不过,在对象构造不成功时,C++会不会象清理堆栈局部变量那样清理这个不完整对象的成员,从而调用这些“成员对象的析构函数”。我感觉不会,这不太符合C++的基本原则。

如果不完整对象的成员不会被自动清理的话,即使用auto_ptr作为成员时,构造函数中建立了auto_ptr维护的对象,然后发生异常,那些已经建立的对象也不会被正确释放。auto_ptr不能保证内存不泄漏,而只有try...cach .. rethow 才可以!

但,我没试过,希望那位试一下!

另外,如果用auto_ptr作为类成员,肯定不可以在析构函数自己释放对象空间了。不是不必,而是不准!

这不仅仅是auto_ptr作为类成员的情况下,事实上,一旦你将对象交给auto_ptr来管理,就永远不要自己释放对象。

还有就是auto_ptr赋值或传递参数时,会把原来的auto_ptr清空,这是因为auto_ptr重载赋值操作符的缘故。很多人不知道,结果出现访问空指针错误。

auto_ptr虽然好,但不明白其中的原理的人,还是不会用啊。
李战(leadzen)

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录