Эта реализация указателя

0
class A
{
public:
    void Test()
    {
      AfxMessageBox("Test Function");
    }
};

A* obj= new A();
delete obj;
obj= NULL;
obj->Test();

Здесь тестовая функция вызывается без какой-либо ошибки, я использую Visual Studio компилятор. если функция-член не обращается к любому другому члену в классе, "этот" указатель не будет использовать вообще? это применимо ко всем компиляторам?

  • 0
    Хотя это нигде не задокументировано (о чем я знаю), компиляторы Microsoft позволят вам избежать неприятностей. Более того, некоторые из собственных библиотечных кодов Microsoft (например, MFC CWnd::GetSafeHwnd() ) используют эту «функцию». Еще лучше не использовать его.
Теги:

1 ответ

10

Это неопределенное поведение. Он может работать, он может не работать, это может вызвать другие странные ошибки.

Не полагайтесь на неопределенное поведение.

  • 0
    Мы можем сказать неопределенное поведение, но если это работает все время без каких-либо ошибок или сбоев, должен быть какой-то трюк, верно? вот в чем мое сомнение ..

Ещё вопросы

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