只是出于好奇,我试图做下面的例子,看看编译器是否给我一个警告,所以不要调用一个以堆栈溢出结束的无限循环。我想也许有一种不同于只调用普通函数或方法的行为。但事实并非如此。有没有特别的解释呢,还是只是作为正常的函数调用来处理,因为我通过使用this
运算符显式调用基类析构函数?编译器如何处理派生析构函数中的基类析构函数调用?
例子:
class A {
virtual ~A();
};
class B : A {
virtual ~B() { this->~A(); }
};
'virtual void〜A();' - 这不应该编译,析构函数不返回任何东西,并且普通的方法名称不能包含tilda。 – yeputons
@yeputons right,sry,is typo –
它会通过调用'〜A()'两次导致未定义的行为(因为有一个隐含的调用,一旦'〜B()'的主体退出) –