假設我們現在有以下代碼:
<Widget*> ( i = ; i < SOME_MAGIC_NUMBER; ++ }
代碼中的Widget為一個類,顯然,此段代碼會造成內存洩露。函數執行結束之後,每一個vwp的元素會被destroy, 但是並不會delete我們使用的Widget對象。Oh, no!內存洩露了!
有人可能要講了,這個不簡單嘛,我把它們delete了不就完事了。在doSomething函數的最後增加如下代碼:
( vector<Widget*>::iterator i = vwp.begin(); i != vwp.end(); ++*i;
可是,對於這種情況,有沒有一些更優雅的方法呢?或許可以利用函數對象來完成這個,看似高端大氣一點而已:
DeleteObject { template<typename T> ()( T* ptr) <SpecialString*>
}
這樣的方法貌似不錯,我們很優雅的完成了指針的釋放。可是就沒有再好點的方法了嗎?好消息總是來的比較晚,智能指針登場了,在C++11的標准中,智能指針位於std命名空間的<memory>頭文件中,需要在使用的時候加入相關的語句(這裡我們使用share_ptr):
#include <memory> std::shared_ptr;
則,上述問題可以按照如下方式解決:
<Widget> SPW;
vector<SPW> ( i = ; i < SOME_MAGIC_NUMBER; ++ Widget));
...
}
感謝閱讀,希望能幫到大家!
Published by Windows Live Writer.