Я изучаю, чтобы понять конструктор классов и деструктор. Я написал небольшой код консоли, чтобы добавить один экземпляр класса в вектор. Все хорошо и денди, но я не понимаю, что добавление одного объекта в вектор триггеров деструктора в два раза. Почему это происходит?Вектор и поведение push_back()
Если я не добавляю никакого объекта, вектор не вызывает конструктор или деструктор сам по себе, так почему это происходит дважды?
Может ли кто-нибудь объяснить, почему это происходит?
#include <cstdio>
#include <vector>
class Test
{
private:
int value;
public:
Test()
{
printf("\nClass constructor triggered.");
};
~Test()
{
printf("\nClass desctructor triggered.");
}
};
int main()
{
std::vector<Test> container;
container.push_back(Test());
return 0;
}
UPDATE: Я добавил еще немного информации к классу так, что я получаю более конкретный вывод, однако теперь я заметил, что с каждым дополнением к вектору шаг-строительство и деструкторы вызовы увеличиваются. Является ли количество этих вызовов привязанным к количеству объектов внутри вектора или того, что происходит? У меня есть утечка? Извините, если слишком глупые вопросы. Ниже добавлен код:
#include <cstdio>
#include <vector>
class Test
{
private:
int value;
public:
// Constructor
Test(int v=0)
{
value = v;
printf("\n\n%i", value);
printf("\nClass constructor triggered.");
};
// Copy-move constructor
Test(Test&&)
{
printf("\nClass move-constructor triggered.");
};
// Destructor
~Test()
{
value = 0;
printf("\nClass desctructor triggered.");
}
};
int main()
{
std::vector<Test> container;
container.push_back(Test(1));
container.push_back(Test(2));
container.push_back(Test(3));
container.push_back(Test(4));
printf("\n\nPushback complete!");
return 0;
}
Поскольку копия взята с помощью 'push_back()'. –
Поскольку вектор содержит объекты, а не указатели на них, ваш объект будет скопирован на вставке, а затем уничтожаются два объекта. –
@ πάνταῥεῖ: Ответы идут туда ↓↓↓↓↓ сколько раз я должен вам сказать –