我正在尝试遵循 Herb Sutter 的 C++ 指南,在这种情况下,我更喜欢unique_ptr
原始指针和shared_ptr
. 支持的论据之一std::unique_ptr
是可兑换为shared_ptr
是在某些时候需要
vector
在我的情况下,我有一个unique_ptr
我需要传递给一个需要一个vector
的方法shared_ptr
。我希望能够写出类似的东西:
for (auto &uniquePtr : vectorUnique)
vectorShared.push_back(make_shared<Abstract>(move(uniquePtr));
这给我Xcode 7.1
配置了基于工具链的以下错误C++11
:
错误:字段类型“抽象”是一个抽象类。
当Abstract
我使用make_shared
. 这似乎使萨特先生的建议在很多情况下都行不通,所以我确定我一定做错了什么!我求助于写作:
for (auto &uniquePtr : vectorUnique) {
auto ptr = uniquePtr.get();
auto shared = shared_ptr<Abstract>(ptr);
vectorShared.push_back(shared);
uniquePtr.release();
}
有一个更好的方法吗?