Push_back派生类的shared_ptr

时间:2012-10-08 19:53:35

标签: c++ containers shared-ptr

我无法理解我的代码发生了什么:为什么我得到“没有匹配函数来调用push_back”错误。我只能猜测这是一个新的错误...

int main(){
  typedef std::tr1::shared_ptr<Base> Base_p;
  typedef std::vector<Base_p> VectorPointers_t;

  std::tr1::shared_ptr<Derived> myDer01(Derived); 
  VectorPointers_t myVector = VectorPointers_t();
  myVector.push_back(myDer01);  
}

2 个答案:

答案 0 :(得分:4)

试试这个:

VectorPointers_t myVector;

myVector.push_back(Base_p(new Derived));

您的代码中存在一个很大的错误:声明myDer01的行实际上声明了函数而不是变量。但即使您编写了(Derived())而不是Derived,也会出错,因为您无法从对象构造共享指针 - 仅来自指针!所以你真的想说new Derived

答案 1 :(得分:-1)

shared_ptr是一个类模板,每次使用不同参数调用该模板都会产生一个单独的类。解决方案是仅创建指向基类的共享指针。