让我们考虑以下代码。事实上,这是我使用 gmock 和模拟 void(void) 方法发现的缩小问题。
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base
{
public:
void GetValueAndDelete() { delete this; } //here we crash
};
int main() {
Derived* p = 0;
p->GetValueAndDelete();
}
构建它:
/tools/gcc6.1/bin/g++ --version
g++ (GCC) 6.1.0
优化级别不同于 -O0 并且运行结果会导致分段错误。
是 gcc 错误还是带有 c++ 代码的东西(是的,是的,我知道它使用副作用,但它可以与其他编译器一起使用,并且也没有优化)