Предположим, у меня есть указатель типа ABC * и другой указатель типа XYZ *, и оба являются производными от общего родительского класса.
Если я назначу XYZ * для ABC * путем явного приведения его, то что произойдетесли я позвоню
удалить abc;// abc типа XYZ *
получу ли я какое-либо исключение или оно будет работать нормально?
Я пробовал приведенный выше код, и он не вылетает.Так может кто-нибудь сказать мне, в каких случаях удаляется исключение выброса / ошибка / сбой и т. Д.
В каких случаях удаление указателя приводит к сбою программы?Будут ли они аварийно завершаться, если в обоих из них будут определены пользовательские деструкторы
Редактировать: вот мой тестовый код, который работает без сбоев
class ABC
{
public:
int a;
int b;
int c;
};
class XYZ
{
public:
double a;
double b;
double c;
};
int main()
{
ABC* abc = new ABC();
XYZ* xyz = (XYZ*)abc;
delete xyz;
return 0;
}
PS: Я на платформе Windows, если это помогает.
EDIT2: Хорошо, после чтения я изменю свой вопрос на: когда удаление указателя вызовет сбой (не считая неопределенного поведения)?
EDIT3: Что произойдет при вызове удаления?Чей деструктор будет называться?