Я вмешивался, тестируя утечки памяти с помощью Intel Inspector, когда заметил что-то, чего не должно быть. Я наследую от std :: vector, который не должен иметь виртуального деструктора, у меня есть дополнительный член в производном классе, я занимаюсь динамическим распределением памяти на нем, в основном создаю производный класс в куче, отбрасываемый в базовый класс , вызывать удаление ... и не обнаруживается утечка памяти ??? По всей логике я должен получить утечку памяти.Почему это не утечка памяти? Или это? Удаление указателя базового класса без виртуальных деструкторов
template <typename T>
class DynamicArray : public std::vector<T> {
public:
DynamicArray() : children(nullptr) {
children = new int(50);
}
~DynamicArray() {
if (children) delete children;
}
DynamicArray& operator<<(const T& value)
{
push_back(value);
return *this;
}
private:
int *children;
};
int main() {
DynamicArray<int> *pArray = new DynamicArray<int>;
(*pArray) << 4 << 5;
static_cast<std::vector<int>*>(pArray);
delete pArray;
}
особенно с вопросов, связанных с этим, это хорошая практика, чтобы объявлять деструкторы 'virtual' (хотя для этого важно, чтобы это относилось к базовому классу) – RageD
Унаследовать от контейнеров STL плохо, mmkay? Используйте составные или не-членные функции шаблонов без друга, если вы должны расширить один из них. – AJG85
@ AJG85 - да, да, как алкоголь и табак, неплохие, но это не помешало людям перестать использовать и злоупотреблять ими. Я только планирую использовать свой производный класс очень ответственно, таким образом, обширное тестирование потенциальных проблем. – dtech