以对象管理指
——MoaKap的学习笔记
在C++中,使用new和delete来动态分配和释放内存。对于任何一个指针,使用完毕后,都有责任释放其空间。
在实际的应用中,我们经常会这样写函数:
class Test
{
…
}
void fun()
{
Test *test1 = new Test;
...
delete test1;
}
函数fun似乎是一个很妥当的方法,它遵循了new和delete的配对使用。但我们不能保证“…”区域内的内容。如果区域内出现了异常,或者是一个意外的return语句,这样就会使我们的程序无法执行delete来释放test1。
为确保test1占用的资源总是被释放,我们需要将资源放进对象,然后由对象的析构函数来释放空间。标准程序库中的auto_ptr正是针对这种情况而设计的,可以方便地管理程序中的资源。
Auto_ptr是一个“类指针对象”,通常也叫“智能指针”,其析构函数自动对其所指对象调用delete。
void fun1()
{
std::auto_ptr<Test> test1(new Test);
…
test1->print();
}
std::auto_ptr<Test> test1(new Test); auto_ptr所做的事情,就是动态分配对象以及当对象不再需要时自动执行清理。
由于auto_ptr被销毁时会自动删除它所指之物,所以不能让多个auto_ptr指向同一个对象。如果是那样,对象会被删除一次以上。为了预防这个问题,auto_ptr有一个不寻常的性质:若通过copy构造函数或copy assignment操作符复制他们,它们会变成NULL,而复制所得的指针将取得资源的唯一拥有权。[Effective C++]