Я довольно плохо знаком с управлением памятью в C ++.Я прочитал Должен ли каждый класс иметь виртуальный деструктор? и нашел ответ:
Каждый абстрактный класс должен иметь либо
- защищенный деструктор, либо
- виртуальный деструктор
Если у вас есть общедоступный не виртуальный деструктор, это бесполезно, поскольку позволяет пользователям через этот указатель удалять производный объект.Поскольку, как мы все знаем, это неопределенное поведение.
Для класса, не предназначенного для удаления через указатель на него, нет никаких причин иметь виртуальный деструктор.Это не только приведет к бесполезной трате ресурсов, но, что более важно, даст неверный намек пользователям.Подумайте, какой дурной смысл в том, чтобы дать std :: iterator виртуальный деструктор.
Так что теперь у меня есть защищенный деструктор (я не наследую от класса).
В другом классе, хотя у меня есть указатель на этот объект.В моем конструкторе я даю указателю «новый» объект этого класса, в моем destrcutor я бы хотел его уничтожить.
Как мне это сделать?Если деструктор не защищен, я получаю ошибку сегмента (которую я не совсем понимаю, но я все равно понимаю, что программирование плохое).Если деструктор защищен, я не знаю, как удалить объект.