Управление памятью с помощью указателей, созданных с использованием «нового» в C ++

0

У меня есть базовый класс, где в заголовке объявлено 2 указателя. Затем указатели инициализируются ключевым словом "новое" в методе базового класса и удаляются с помощью "delete" в деструкторе базового класса.

У меня также есть производный класс, который наследуется от базового класса. Я также объявляю указатель. В зависимости от логического значения этот указатель присваивается либо указателю базового класса. Однако это приводит к segfault при вызове деструктора базового класса.

Я понимаю, что это происходит потому, что производный класс автоматически удалит указатель перед вызовом деструктора базового класса. Когда в базовом классе вызывается "delete", тогда эта область памяти уже освобождена и результат segfault.

Каков правильный способ сделать это? Моя цель - иметь указатель в производном классе, который может гибко равняться одному из указателей, инициализированных в базовом классе.

  • 5
    Лучше показать код (даже если это всего лишь псевдокод), чем описывать его в прозе.
  • 0
    Психический отладчик говорит: «вы delete динамические данные как в производном, так и в базовом классе»
Теги:
pointers
memory-management

2 ответа

2

Либо не удаляйте указатель в производном классе, либо используйте стандартный интеллектуальный указатель std::shared_ptr

0

У вашего базового класса должен быть виртуальный деструктор, тогда вы должны переопределить деструктор в производном классе, чтобы убедиться, что все будет удалено в ожидаемом порядке.

Но трудно сказать, что происходит, не видя кода, так что просто мысль...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню