[英]How do you push_back a shared_ptr variable to a vector of shared_ptrs in C++?
[英]C++ - Putting auto_ptrs in a shared_ptr vector
我有一個shared_ptrs的向量。 我目前正在將auto_ptrs放入其中。 這樣可以嗎?
Room.hpp:
vector<shared_ptr<Item>> items;
void addItem(auto_ptr<Item>);
主要:
room.addItem(auto_ptr<Item>(new Item(...)));
別。 自從C ++ 11起, auto_ptr
就已棄用,並且由於其奇怪的所有權語義而受到批評。 復制auto_ptr
會將所有權轉移到復制的對象。 在您的情況下可能沒問題,但是如果這樣做,例如:
auto_ptr<Item> x = room[1]; // ouch
事情開始變得丑陋。
如果您需要共享所有權,請使用std::shared_ptr
如果不需要,請使用std::unique_ptr
。 如果沒有C ++ 11編譯器,請使用Boost.SmartPointers。 如果僅將指針用於多態而不是共享所有權,則還會有一個Boost.Pointer容器 。
如果您真的想保留您的API,則需要使用:
addItem(auto_ptr<Item>&&);
請記住, auto_ptr
之后將為空。
不要在任何STL容器中使用auto_ptr
。 而且根本不要使用auto_ptr
! 關於gotw的 auto_ptr
的麻煩,有一篇很好的文章: GotW#25 。
使用boost::ptr_vector
。
這將起作用shared_ptr
具有一個構造函數,該構造函數從auto_ptr
轉移所有權。
但是,由於auto_ptr
具有奇怪的破壞性復制語義,因此最好避免使用。 在C ++ 11中,唯一可轉讓所有權應首選unique_ptr
。 這也可以用來初始化shared_ptr
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.