Одна проблема, которую я вижу с Class1
, заключается в том, что она не защищена от копирования, но конструкторы копирования и присваивания не были подавлены.
Это может вызвать проблему, поскольку деструктор Class1
отмечен как освобождение памяти для всех элементов в mVec
. Использование неявного оператора означает, что в итоге вы получите 2 экземпляра Class1
, указывающих на те же экземпляры CustomClass3
, а вторым деструктором будет двойное удаление памяти. Например
Class c1;
c1.mVec.push_back(new CustomClass3(...));
Class c2 = c1;
В этом случае второй запущенный деструктор (c1) освободит уже удаленный экземпляр CustomClass3
. Вы должны отключить конструкцию и назначение копирования для Class1
, чтобы предотвратить это
class Class1 {
...
private:
Class1(const Class1&);
Class1& operator=(const Class1&);
};