2013-12-13 6 views
-1
#include"iostream" 
using namespace std; 
class base{ 

public: 
void f() 
     { 
     cout<<"base f:"<<endl; // prints base f: 
     } 
}; 


int main() 
{ 
base *b; // even same out put with " base *b =NULL; " 

b->f(); 
return 0; 
} 

O/P : 기본 F : 함수 호출 ++

어느 한 함수가 포인터로 객체를 지정하지 않고 호출 점점 방법을 설명하시기 바랍니다 수 있습니다. 개체의 변수에 액세스 할 시도가 없습니다 여기에는 vtable에이 없기 때문에 초기화 (또는 0으로 초기화) 객체의 포인터하지와 멤버 함수의

Thanks. 

답변

3

전화 그러나 그것을 할 수있다 작품 정의되지 않은 동작입니다. 당신은

void f_base(base* p) 
{ 
    cout << "base f:" << endl; 
} 

접근이 없을 것처럼이 기능을 볼 수 있습니다 - 오류가 작동하는 모든 현대 컴파일러에,이 없지만, 언제든지 변경 될 수 있습니다.

0

이것은 잘못된 코드이지만 base :: f()에있는 멤버 변수에 액세스 한 것이 없기 때문에 유효하지 않은 메모리가 변경되지 않습니다.

회원을 추가하고 기능에서 인쇄하려고하면 의심의 여지없이 충돌이 발생합니다.

0

당신은 메모리가

누수 방지하기 위해 delete 필요 ... 즉

base *b; // even same out put with " base *b =NULL; " 

base *b = new base; 

해야 new

를 사용할 필요가