Прямо, вектор скопирован как ожидалось. Существует хорошее программное обеспечение под названием 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. Затем мы перетаскиваем его в вектор полигонов. Аргумент, poly, копируется в новый вектор, который создается внутри вектора многоугольников и управляется им.
Если он падает, проблема, вероятно, лежит в пределах другой части вашей программы. Проверяет, что конструктор/конструктор и деструктор копирования работают правильно и что они не удаляют дважды, если вы используете динамическое распределение памяти.
Полигон «класс» (на самом деле typedef) уже имеет хороший конструктор копий. Вероятно, вы имеете в виду класс Point. – ahy1
Да, я сделал.Спасибо за это - исправились :-) – Peter