Здесь:
s[i] = new Obj2(*this*param.GetColumn(i+1));
Вы создаете динамический c объект и назначаете s[i]
, чтобы указать на него.
Чтобы удалить его, вы делаете это:
delete s[i];
Если вы этого не сделаете, выделение будет просачиваться.
Вы должны повторить это в al oop для каждого i
точно так же, как вы повторяли распределения. Конечно, вы должны сделать это, прежде чем удалить s
.
s[i]->~Obj2();
Не делайте этого. Вызывать деструктор здесь неуместно. delete
вызовет деструктор.
PS Не используйте необработанные указатели владения. Вместо этого используйте контейнеры или умные указатели. std::vector
- это стандартные контейнеры для динамических c массивов.
PPS Вы должны избегать ненужного динамического выделения c. Ваш пример не демонстрирует необходимости динамического выделения указанных объектов. Таким образом, в этом случае вам, вероятно, следует использовать std::vector<Obj2>
.