李战:
有个问题,auto_ptr只对局部变量或参数有效吧?
[阅读: 485] 2007-03-04 04:30:57
记得auto_ptr是利用程序作用域转换时会自动调用对象的析构函数原理来设计的。比如:
TMyObject()
{
auto_ptr<TOtherObject> OtherObject; //这里定义为局部变量
auto_ptr = new TOtherObject();
//即使后面不显式释放对象,或者发生异常,就会跳出当前作用域,从而自动调用auto_ptr的析构函数(间接释放对象)。
}
因为局部变量和参数总存在线程的堆栈中,作用域退出时,就会从堆栈中弹出这些数据。而C++会确保在弹出变量时,调用这些变量的析构函数,从而释放内存。
不过,如果OtherObject并不是该方法函数的局部变量,而是类的成员,也就比该方法函数的作用域要大。至少退出该函数时,是不会被调用析构函数的。
但如果,TMyObject构造不成功时,C++是否会自动调用这个不完整对象的成员的析构函数就不知道。感觉不会,没有试过。
我这里没有装任何C++环境,希望那位有兴趣的试一下,回报结果。
多谢大牛引出这个问题,哈哈。
李战(leadzen)