利用 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 則留言:
盡量不要使用 auto_ptr。使用 scoped_ptr 或是 shared_ptr 都會比 auto_ptr 更明確...
尤其是 auto_ptr ownership 的轉移這點,常常會拐到人。
感激~~
我來看看scoped_ptr 和 shared_ptr好了。
張貼留言