#include <iostream>
using namespace std;
class B
{
B();
public:
virtual void print()=0;
};
void B::print()
{
cout << "B::print";
}
int main()
{
B *bp;
bp->B::print(); /* Type-A works fine */
bp->print(); /* Type-B segmentation fault */
return 0;
}
위 코드에서 'bp'를 통해 순수 가상 함수를 호출하려고합니다. 주 기능에는 두 가지 유형의 호출 (Type-A, Type-B)이 있습니다. 내 질문은 A가 작동하지만 B가 작동하지 않는 이유입니다. 또한 왜 컴파일러는 객체를 만들지 않고 비 정적 함수를 호출 할 수 있습니다.순수 가상 함수의 이상한 동작
Re : "* 컴파일러는 개체를 만들지 않고 비 정적 기능을 호출 할 수있는 이유는 무엇입니까?"컴파일러에서 사용자가 수행중인 작업을 알고 있다고 가정하기 때문입니다. 컴파일러가'bp'가 일반적인 경우에 유효한 것을 가리키는 지 확인하는 간단한 방법은 없습니다. –
경고 수준에 따라'경고 C4700 : 초기화되지 않은 지역 변수 'bp'used'와 같은 것이 보일 것입니다. – Derek