只要您不尝试制作 的副本unique_ptr
,您就可以使用它。您必须“双重取消引用”迭代器才能获得指针的值,就像您必须使用shared_ptr
. 这是一个简短的例子:
#include <vector>
#include <memory>
#include <iostream>
template <class C>
void
display(const C& c)
{
std::cout << '{';
if (!c.empty())
std::cout << *c.front();
for (auto i = std::next(c.begin()); i != c.end(); ++i)
std::cout << ", " << **i;
std::cout << "}\n";
}
int main()
{
typedef std::unique_ptr<int> Ptr;
std::vector<Ptr> v;
for (int i = 1; i <= 5; ++i)
v.push_back(Ptr(new int(i)));
display(v);
for (auto i = v.begin(); i != v.end(); ++i)
**i += 2;
display(v);
}
如果您(不小心)复制以下内容unique_ptr
:
Ptr p = v[0];
然后你会在编译时发现。它不会导致运行时错误。您的用例就是container<unique_ptr<T>>
构建的原因。事情应该可以正常工作,如果没有,问题就会出现在编译时而不是运行时。所以代码离开,如果你不理解编译时错误,然后在这里问另一个问题。