让我们说我有包含类类型“XX”的STL矢量。 xx是抽象的。我遇到了这个问题,其中编译器不会让我“实例”当我做类似如下:

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

void main()
{
    ;
}

我想这是因为拷贝构造函数必须被调用。我已经解决此问题通过存储XX *的向量中的,而不是XX的得到。有没有更好的解决办法?这是什么?

有帮助吗?

解决方案

当您使用push_back,正在制作的对象的副本,并将其存储在所述载体中。正如你猜测,这也不行,因为你不能实例化一个抽象类,它是基本上是复制建筑正在做什么。

使用指针建议,或在类似的升压洛基

其他提示

要比教皇更宽容(或在这种情况下史蒂夫Guidi的),用于存储在STL容器对象的要求是它们是复制施工的和可分配和一个抽象类两者都不是。因此,在这种情况下指针的容器是要走的路。 另一件事的情况下,考虑您决定不使抽象类是切片解决的事情

的std ::矢量(和一般的整个STL)被设计成储存的值。如果你有一个抽象类,你不这样做的意图操纵这种类型的值,但操纵指针或引用它。因此,有抽象类的一个std ::向量是没有意义的。而且,即使它不是抽象的,它没有通常意义的操纵类设计为基类的价值,他们平时应noncopiable(拷贝构造函数和赋值操作符声明为私有,而不是实行的是标准的把戏,继承合适的类,其孤目的是使其后代非可复制 - 升压::不可复制例如 - 已成为fashionanle)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top