假设我有一个看起来像这样的课程:
class Foo
{
int sam;
float fisher;
double irvin;
vector<Bar> lambert;
};
我希望将Foo
的实例存储到向量
vector<Foo> foos;
因为lambert
可以容纳一定数量的Bar
s,所以可能会发生对象切片,或者c ++的向量是否相当聪明?
使用unique_ptr
的向量会更好吗?或者我对它过分担心?
class Foo
{
...
vector<unique_ptr<Bar>> lambert;
};
谢谢:)!
答案 0 :(得分:4)
当您将派生值存储为其基础时,会发生对象切片。它只发生在价值观上。假设您总是存储Bars,而不是其衍生物,则不会发生切片。 vector
将其值存储在其他位置 - 这与保持静态大小的数组不同。