2016-02-10 4 views
1

Скажем, у меня есть класс, который выглядит следующим образом:вектор <Class> или вектор <unique_ptr <Class>> в данном случае?

class Foo 
{ 
    int sam; 
    float fisher; 
    double irvin; 

    vector<Bar> lambert; 
}; 

и я хочу, чтобы хранить экземпляры Foo в вектор

vector<Foo> foos; 

поскольку lambert может содержать неопределенное количество Bar с, может возразить нарезание происходит или вектор C++ довольно умен?

Было бы лучше использовать вектор unique_ptr или я слишком переживаю об этом?

class Foo 
{ 
    ... 
    vector<unique_ptr<Bar>> lambert; 
}; 

Спасибо :)!

+1

Я не вижу в вашем коде рекламы. Все, что у вас есть, это структура, содержащая вектор, и вы создаете вектор этих структур. – PaulMcKenzie

+3

Чтобы иметь нарезку, вам нужно наследование. У вас есть наследование в вашем коде? – Borgleader

+0

Что вы подразумеваете под "slicing"? Если вам нужны экземпляры 'Bar' в' Foo', тогда 'std :: vector ' это путь. – Pixelchemist

ответ

4

Нарезка объектов происходит, когда вы храните производное значение в качестве базы. Это происходит только с ценностями. Предполагая, что вы всегда храните бары, а не какое-то их производное, никакого нарезки не будет. vector сохраняет свои значения в другом месте - это не похоже на сохранение массива статического размера.

+0

Ahhh Allright, да, Bar - это «плоский» класс. У меня это не получилось, теперь все ясно. Всем спасибо. – Riptide