Использование nullptr для вызова функции

Извините, я не смог придумать лучшего названия после того, как во время экспериментов столкнулся со следующим фрагментом кода.

Чего я здесь не понимаю, так это того, как я мог вызвать функцию класса, используя в этом случае nullptr.

#include <memory>
#include <iostream>
using namespace std;

class test {
   public:
      void testfunc() {
         cout << "calling test func" << endl;
      }
};

int main () {
   unique_ptr<test> ptr;
   if (ptr == nullptr) {
      cout << "ptr is null" << endl;
   }

   ptr->testfunc();
   return 0;
}

По моему мнению, это должно просто рухнуть, потому что это nullptr, но это не так и работает так, как будто ptr не является nullptr.


person pranavk    schedule 20.02.2016    source источник
comment
Это невезение, не более того. Неопределенное поведение означает, что может произойти что угодно, в том числе запуск, как будто ничего плохого не произошло.   -  person Pete Becker    schedule 20.02.2016
comment
Вот что может сделать с ним GCC.   -  person chris    schedule 20.02.2016
comment
Этот указатель не используется, он аналогичен test * ptr=0; ptr-›testfunc(); undefined, но большинство компиляторов с этим согласны.   -  person QuentinUK    schedule 20.02.2016