对于学校作业,我试图使用Employee对象的唯一指针向量来访问Employee数据,但无法弄清楚语法/编译器错误。谁能告诉我我做错了什么?必须以这种方式使用智能指针的矢量。
以下是适用的代码:
// Create an Employee
Employee EmpRec;
// Assign value to a uniqueptr
unique_ptr<Employee> TempEmp;
*TempEmp = EmpRec;
// Create a vector of unique_ptr<Employee>
vector<unique_ptr<Employee>> EmpVect;
// Push the TempEmp pointer onto the vector
EmpVect.push_back(TempEmp);
// Iterate through vector, calling display function
//that prints the values of various data inside the Employee object
for (size_t i = 0; i < EmpVect.size(); ++i){
(EmpVect[i])->display(cout);
}
这是我的显示功能的定义方式:
void display(std::ostream& cout) const{
// print data members using cout <<
}
尝试编译时,我收到以下错误:
d:\ microsoft visual studio 12.0 \ _vc \ include \ xmemory0(593):错误C2280:&#39; std :: unique_ptr&gt; :: unique_ptr(const std :: unique_ptr&lt; _Ty,std :: default_delete&lt; _Ty&gt; ;&gt;&amp;)&#39; :尝试引用已删除的函数
答案 0 :(得分:13)
像这样调用push_back
会尝试将unique_ptr
复制到向量中。你无法复制unique_ptr
!相反,您需要将其移动到矢量中:
EmpVect.push_back(std::move(TempEmp));
但是,你确实有另一个问题。您的unique_ptr
未初始化为指向任何特定的已分配Employee
,但您尝试分配给该对象。这不好。相反,您应该动态分配Employee
并将其传递给unique_ptr
构造函数:
unique_ptr<Employee> TempEmp(new Employee());
或者最好使用an implementation的std::make_unique
(将在C ++ 14中提供)。