2014-02-18 51 views
4

我們剛剛將我們的編譯器升級到支持C++ 11的VC++ 2013.以前,我們一直使用Boost的shared_ptr和scoped_ptr類,但因爲這是我們所有一直在使用Boost,我們正在尋求消除這種依賴。C++中boost :: scoped_ptr的替代品11

據我所知,std :: shared_ptrs是boost :: shared_ptrs的一個替代替代品,所以這是(希望)很容易。

但是,什麼是Boost scoped_ptrs(如果有的話)的最佳替代品?它會是unique_ptr嗎? (說實話,即使我寫了代碼,大約在10年前,我忘記了使用scoped_ptrs的目的是什麼......也許我只是在用Boost「玩」,但作爲就像我可以看到一個普通指針可能會在我檢查過的情況下那樣)。

+2

是的,'unique_ptr'是替代品。 – jrok

回答

7

是的,scoped_ptr可以並應該用unique_ptr代替。他們代表了同樣的想法(獨特的所有權),但unique_ptr做的更好,並允許通過移動語義所有權的轉移。 (scoped_ptr不是因爲在C++ 98中不可能)

+2

值得注意的是'const std :: unique_ptr '是'scoped_ptr'的更精確的替換,因爲'const'不允許從'unique_ptr'移動。 –

+0

當然,你可以這麼說。但是'unique_ptr'只允許移動,如果'T'是可移動的,顯然,對於C++ 98代碼來說,情況從來就不是這樣。 'scoped_ptr'的行爲從來沒有爲活字定義,因爲活字並不存在,所以我實在不明白一個行爲是「更精確的更換」比其他。 (然而,這是一件好事,使東西'const'如果你能) – jalf

+0

嗯......也許我誤解你了。當然,'unique_ptr '可以從'T'移動嗎? [查看即時的代碼示例](http://ideone.com/5APgFI) –