0
我想用另一个替换该索引处的unique_ptr对象,这实质上是“删除”了当前在该向量中的指针,并将classObj移动到该位置。用另一个unique_ptr替换vector中的unique_ptr对象
std::unique_ptr<ClassName> classObj(new className());
classNameStorage[5] = classObj; // classNameStorage.size() > 5
上面的代码,使用赋值运算符是无效的。
可能的重复[为什么我不推送\ _返回一个唯一的\ _ptr成矢量?](http://stackoverflow.com/questions/3283778/why-can-i-not-push-back-a- unique-ptr-into-a-vector) –
在旁注上,第一行可以表示为auto classObj = std :: make_unique()'。根据Scott Meyers的说法,'std :: make_unique'(除了输入较少)的优点是它确保'unique_ptr'在实例化'T'时立即拥有所有权。这对于更复杂的表达以及存在例外的情况有所不同。编译器首先评估'new T',然后评估'x(std :: unique_ptr (new T),y())',然后评估''()',然后评估前者的'unique_ptr'构造函数。在这种情况下,来自'y()'的throw将会泄漏一个'T'。 –
user4815162342
classNameStorage的类型是什么? –