6.17.2010

auto_ptr

auto_ptr 是 smart_ptr 的一種。

利用 auto variable 在離開 scope 會自動被 delete 的特性。
讓 一般的 pointer variable 在 new object 後,也有這樣的特性。
這樣,就不必特地在 function return 前 手動 call delete 了。

參考 http://ootips.org/yonat/4dev/smart-pointers.html

原來 pointer 的寫法:
void foo()
{
MyClass* p(new MyClass);
p->DoSomething();
delete p;
}

改用 auto_ptr 後,可以這樣寫:
void foo()
{
auto_ptr<MyClass> p(new MyClass);
p->DoSomething();
}

針對 memory 管理這一點,auto_ptr 還提供一些其他的功能:
  • 指定;當一個 ptr = 另一個 ptr,原來 ptr 的 object 會先 delete 掉。
  • exception handling : 在所有動作作try-catch,這樣當 exception 時,還可以正常 free 掉 object

2 則留言:

Hubert 提到...

盡量不要使用 auto_ptr。使用 scoped_ptr 或是 shared_ptr 都會比 auto_ptr 更明確...

尤其是 auto_ptr ownership 的轉移這點,常常會拐到人。

Checko 提到...

感激~~
我來看看scoped_ptr 和 shared_ptr好了。