3
, 나는 이런 식으로 뭔가를 얻을
:출력
이;; Function virtual Foo::~Foo() (null)
;; enabled by -tree-original
{
<<cleanup_point <<< Unknown tree: expr_stmt
(void) (((struct Foo *) this)->_vptr.Foo = &_ZTV3Foo + 8) >>>
>>;
}
<D.20148>:;
if ((bool) (__in_chrg & 1))
{
<<cleanup_point <<< Unknown tree: expr_stmt
operator delete ((void *) this) >>>
>>;
}
내 질문은 : "<D.20148>:;
"이 표시된 후 코드는 어디에 있습니까? 소멸자의 외부에 있으므로이 코드는 언제 실행됩니까?
어셈블리 출력을보고 나면 네가 옳은 것처럼 보입니다. 그러나 코드가 소멸자의 외부에 표시되는 이유와 레이블의 의미를 알 수 있습니까? – Job
컴파일러는 작성한 코드에 따라 생성 된 내용을 표시합니다. 해당 레이블 다음의 코드는 자동 생성되며 소멸자가 아니라 삭제 호출에 의해 실제로 유도됩니다. 소멸자 바로 다음에 호출되었지만 소멸자 코드의 일부가 아닙니다. 나는 라벨이 무엇을 의미하는지 전혀 모른다. –