В C ++ у меня есть class A
, в котором есть указатель абстрактного класса для учета полиморфизма, содержащегося в class B
, у меня есть еще один указатель на абстрактный class C
, который выделяет конкретный экземпляр дочернего класса class B
в эту память, и мне нужно вызвать функцию очистки (см. вопрос ниже) из class C
, чтобы освободить память, занятую дочерним классом class B
, который я выделил из кучи, проблема в том, что я не могу гарантировать, что я Я имею доступ к функции очистки, потому что у меня есть только указатель на class C
, который я не могу просто скопировать, потому что он может исчезнуть к тому времени, когда я вызову необходимость уничтожить содержащую class A
.
Чтобы решить проблему отсутствия доступа к функции очистки, я могу вызвать delete для указателя class A
, даже если я указываю на дочерний класс? Сохраняет ли новый C ++ также размер блока кучи, например, malloc, так что вы можете просто удалить память, на которую ссылается указатель на абстрактный класс, подобный этому? Если нет, существует ли другой способ организации программы, позволяющий мне обрабатывать ситуация?