#include <iostream>
#include <vector>
class A
{
public:
A() { std::cout << "constructor" << std::endl; }
~A() { std::cout << "destructor" << std::endl; }
};
int main()
{
std::vector<A> myvec;
myvec.push_back(A());
myvec.push_back(A());
myvec.clear();
return 0;
}
выход:Путаница после станд :: вектор строительства/разрушения в векторе :: ясном
constructor
destructor
constructor
destructor
destructor
destructor
destructor
Есть пять вызовов деструктора здесь. Первые два связаны с временными, которые передаются push_back
. Есть еще три вызова, но я ожидал еще два дополнительных звонка.
myvec.clear()
очистит только два содержимого, поэтому деструктор A
должен вызывать только два раза (вместо трех). почему существует один дополнительный деструктор времени?
Но, если я нажимаю только один элемент на вектор, а не на два, вывод будет таким, каким я ожидал.
А как насчет деструкторов, называемых временными объектами, которые копируются? –
Перераспределение происходит, когда емкость должна увеличиваться с 1 до 2. –
добавить int в A(), использовать разные значения в конструкторах и показать его в конструкторе/деструкторе, только для отладки – Pieter21