重载+ =运算符将unique_ptr添加到std :: list C ++

时间:2016-11-25 04:37:56

标签: c++ list operator-overloading move-semantics unique-ptr

假设我有一个抽象基类vehicle,以及两个派生类cartruck。我有第三个班级dealership,其中包含cartruck个实例的列表。 dealership包含私人数据成员list<unique_ptr<vehicle>> vehicleList

假设我将dealership的实例创建为dealership d1("bobsCars");,将car的实例创建为unique_ptr<vehicle> c1(new car("Toyota", 1988, 1500));

如何重载+ =运算符,以便d1 += std::move(c1);c1移至d1

我尝试将+ =重载为dealership的成员函数,如下所示,

void operator+=(std::unique_ptr<vehicle> v){
  vehicleList.push_back(std::move(*v));
}

template <typename T>
void operator+=(std::unique_ptr<T> v){
  vehicleList.push_back(std::move(*v));
}

但我收到错误error C2664: 'cannot convert argument 1 from..

我可以通过将列表更改为list<vehicle*> vehicleList来使用原始指针。将车辆实例创建为vehicle* c1 = new car("Toyota", 1988, 1500);

void Task::operator+=(vehicle* s){
  vehicleList.push_back(s);
}

dealership个实例设为dealership d1("bobsCars");,然后将新车添加到vehicleList

d1 += std::move(c1);

我错过了什么?如何将原始指针版本转换为unique_ptr

0 个答案:

没有答案