임시 변수를 이해할 때 다음 코드가 작동해야하지만 그렇지 않습니다.C++ temporary - "순수 가상 메서드"
struct base
{
virtual~base() {}
virtual void virt()const=0;
};
struct derived:public base
{
virtual void virt()const {}
};
const base& foo() {return derived();}
int main()
{
foo().virt();
return 0;
}
virt()를 호출하면 "순수 가상 함수 호출"오류가 발생합니다. 왜 그런가요, 어떻게해야합니까?
가상 테이블도 정리 될 것이기 때문에 ... 따라서 메시지. –
@DougT .: "정의되지 않은 동작"에는 "때문에"가 없습니다. (그 외에도 가상 테이블 *은 결코 "정리"되지 않습니다.) –
virt()가 반환 된 후 전체 표현식의 끝에서 임시 객체가 삭제되지 않아야합니까? – Dave