2016-01-13 4 views
2

Общий указатель работает без присвоения памяти классу Win.Общий указатель работает без назначения

Код:

class Win 
{ 
public: 
    void disp() 
    { 
     //Do something 
    } 
}; 

int main() 
{ 
    std::shared_ptr<Win> sharedptr;///holds null pointer 
    sharedptr->disp();//// why its working 
} 

Почему звонит выше функции без назначения памяти к нему. Может ли кто-нибудь помочь мне в этом?

+4

Это неопределенное поведение, все может произойти, включая поведение, которое вы наблюдаете. –

+0

Возможный дубликат [Как может компилятор C++ оптимизировать неправильное иерархическое downcast, чтобы вызвать реальное неопределенное поведение] (http://stackoverflow.com/questions/10278199/how-can-c-compiler-optimize-incorrect-hierarchical-downcast-to- cause-real-unde) – BoBTFish

+0

почему это не должно быть? Функция не использует переменные-члены. – user463035818

ответ

2

Попробуйте сделать это следующим образом:

#include <memory> 
#include <iostream> 
class Win 
{ 
    public: 
void disp(){std::cout << x;} 
int x=5; 
}; 

int main() 
{ 
    std::shared_ptr<Win> sharedptr;///holds null pointer 
    sharedptr->disp();//// why its working 
} 

Вы не получите 5. Вы можете получить что-нибудь. Как и ребята в комментариях, это неопределенное поведение.

+0

Oh. Понял, спасибо. – Jeggu

Смежные вопросы