Подобные вопросы задавались здесь много раз, хотя ответы не помогли решить мою проблему.
Допустим, у меня есть:
1) Два класса (ACLass и BClass)
2) AClass имеет конструктор и деструктор
3) BClass имеет член std :: vector, который хранит объекты AClass
4) Количество элементов в этом векторе равноUNKNOWN заранее
5) Каждый раз, когда вызывается метод BClass generateObject (), вектор расширяется при создании нового объекта AClass.Это делается с помощью вызова std :: vector.push_back ().
class AClass {
AClass() { //Constructor }
~AClass() { //Destructor }
};
Class BClass {
std::vector<AClass> object;
void generateObject() {
object.push_back(AClass());
}
};
Теперь, в приведенном выше примере, generateObject () будет работать только пару раз.Как только вектор становится слишком маленьким, чтобы содержать все объекты, он выполняет различные внутренние операции, чтобы зарезервировать больше памяти для возможности расширения.Проблема состоит в том, что некоторые из (если не все) деструкторов AClass вызываются во время процесса.
Поскольку число элементов неизвестно, резервирование большего пространства для вектора с помощью reserve () не является опцией.Использование emplace_back () также не решило мою проблему.
Так как мне поступить?Есть ли способ предотвратить вызов деструкторов?Является ли использование std :: vector в этом случае хорошей идеей?