Правильно, вектор копируется, как и ожидалось. Есть хорошее программное обеспечение под названием geordi , которое может показать это:
{
using namespace tracked;
typedef vector<B> poly_t;
poly_t poly(3); // contains 3 B's
vector<poly_t> v;
v.push_back(poly);
}
Отслеживает создание / копии tracked::B
. Вот вывод:
B0* B1*(B0) B2*(B0) B3*(B0) B0~ B4*(B1) B5*(B2) B6*(B3) B4~ B5~ B6~ B1~ B2~ B3~
Это выводится, когда мы только отслеживаем v.push_back
:
B4*(B1) B5*(B2) B6*(B3)
Как видите, первый B0 создается как аргумент по умолчанию для векторного конструктора. Затем этот объект копируется в 3 B и после этого B0 снова уничтожается, когда возвращается конструктор. Поли затем создается. Затем мы помещаем его обратно в вектор многоугольников. Аргумент poly копируется в новый вектор, который создается внутри вектора многоугольников и управляется этим.
В случае сбоя проблема, вероятно, связана с другой частью вашей программы. Проверяет, что конструктор / конструктор копирования и деструктор работают правильно и что они не удаляют объекты дважды, если вы используете динамическое распределение памяти.