Вы не выполнили правило трех : Cube
не реализует правильный оператор назначения копирования.Как уже упоминали другие, вы также не соответствовали new[]
с delete
, что может закончиться только слезами.
При этом вам не нужно использовать указатели или явное динамическое распределение для всего этого.Вам следует заменить использование new char[]
на std::string
и не размещать какие-либо объекты Cube
в куче.В хорошо написанной программе на C ++ new
следует использовать редко, а delete
почти никогда не нужно использовать.
Эта программа не имеет явного динамического размещения, имеет тот же результат, что вы ожидаете от вашей программы, но она верна.Обратите внимание, насколько более чистым является код, когда вы не беспокоитесь о динамическом размещении или явном уничтожении вещей самостоятельно!
#include <string>
#include <vector>
struct Cube {
std::string str;
explicit Cube(std::string const& s) : str(s) { }
};
void foo(std::vector<Cube>& vec) {
for (int i = 0; i < 10; ++i) {
vec.push_back(Cube("hello !!"));
}
}
int main() {
std::vector<Cube> vec;
foo(vec);
}
Убедитесь, что у вас есть хорошая вводная книга по C ++ .