stl vector.push_back()抽象类不编译

San*_*nto 3 c++ stl vector copy-constructor

假设我有一个包含类类型"xx"的stl向量.xx是抽象的.我遇到过这样的问题:当我执行以下操作时,编译器不会让我"实例化":

std::vector<xx> victor;
void pusher(xx& thing)
{
    victor.push_back(thing);
}

void main()
{
    ;
}
Run Code Online (Sandbox Code Playgroud)

我认为这是因为必须调用复制构造函数.我通过将xx*存储在向量而不是xx中来解决这个问题.有更好的解决方案吗?它是什么?

Ste*_*idi 12

使用时push_back,您正在制作对象的副本并将其存储在向量中.正如你推测的那样,这不起作用,因为你无法实例化一个抽象类,这基本上就是复制结构正在做的事情.

建议使用指针,或者像boostloki这样的库中提供的众多智能指针类型之一.

  • 但是*不要*使用std :: auto_ptr.由于它们具有奇怪的复制语义,因此无法将它们放入STL容器中. (7认同)
  • 你也可以使用boost的ptr_vector - http://www.boost.org/doc/libs/1_39_0/libs/ptr_container/doc/ptr_container.html (5认同)