Деструктор класса должен освобождать ресурсы, которые были получены в его конструкторе.Кажется, вы хотели отложить удаление массива, выделенного в одном классе, деструктору второго класса.Это никогда не хорошая идея.В лучшем случае вам не нужно ничего делать в деструкторе, потому что вы используете автоматическое хранение (подразумевается то, что предполагает название: память управляется автоматически).
Ваш код может выглядеть следующим образом:
struct StructA {
StructA(parameters) { ... } //StructA onstructor
};
struct StructB {
std::vector<StructA> pObjectA;
int counter = 0;
void function() {
if (counter < 1) { pObjectA.reserve(100); }
pObjectA.emplace_back(parameters);
counter++;
}
};
struct StructC {
StructB objectB;
};
int main() {
StructC objectC;
for (int i = 0; i < 900; i++) {
objectC.objectB.function();
}
return 0;
}
Обратите внимание, что я пытался сохранить структуру, как есть, возможно, есть другие вещи, которые нужно изменить.Например, вам не нужно counter
, так как вы можете использовать std::vector::size
для запроса количества элементов в векторе.
PS: Как вы уже заметили, это утечка памяти:
pObjectA[counter] = *new StructA(parameters); //Memory leak here
Не совсем понятно, зачем вы написали этот код.Идоматический способ создания объекта типа StructA
- StructA a;
(не новый!).