中国开发网: 论坛: 程序员情感CBD: 贴子 479224
李战
有个问题,auto_ptr只对局部变量或参数有效吧?
记得auto_ptr是利用程序作用域转换时会自动调用对象的析构函数原理来设计的。比如:

TMyObject()
{
auto_ptr<TOtherObject> OtherObject; //这里定义为局部变量
auto_ptr = new TOtherObject();
//即使后面不显式释放对象,或者发生异常,就会跳出当前作用域,从而自动调用auto_ptr的析构函数(间接释放对象)。
}

因为局部变量和参数总存在线程的堆栈中,作用域退出时,就会从堆栈中弹出这些数据。而C++会确保在弹出变量时,调用这些变量的析构函数,从而释放内存。

不过,如果OtherObject并不是该方法函数的局部变量,而是类的成员,也就比该方法函数的作用域要大。至少退出该函数时,是不会被调用析构函数的。

但如果,TMyObject构造不成功时,C++是否会自动调用这个不完整对象的成员的析构函数就不知道。感觉不会,没有试过。

我这里没有装任何C++环境,希望那位有兴趣的试一下,回报结果。

多谢大牛引出这个问题,哈哈。
李战(leadzen)

相关信息:


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