Jea*_*ley 0 c++ memory-management smart-pointers
我有一个shared_ptrs的向量.我正在把auto_ptrs放进去.这没关系还是事情会破裂?
Room.hpp:
vector<shared_ptr<Item>> items;
void addItem(auto_ptr<Item>);
Run Code Online (Sandbox Code Playgroud)
主要:
room.addItem(auto_ptr<Item>(new Item(...)));
Run Code Online (Sandbox Code Playgroud)
别.auto_ptr由于其奇特的所有权语义,它在C++ 11中已经被弃用,并且从一开始就受到批评.复制auto_ptr将所有权转移到复制的对象.在您的情况下可能没问题,但如果您这样做,例如:
auto_ptr<Item> x = room[1]; // ouch
Run Code Online (Sandbox Code Playgroud)
事情开始变得难看.
std::shared_ptr如果您需要共享所有权,请使用a; 如果不需要,则使用a std::unique_ptr.如果您没有C++ 11编译器,请使用Boost.SmartPointers.如果您只使用指针进行多态而不是共享所有权,那么还有一个Boost.Pointer容器.
如果您真的希望以这种方式保留API,则需要使用:
addItem(auto_ptr<Item>&&);
Run Code Online (Sandbox Code Playgroud)
请记住,auto_ptr之后将是空的.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |