在一个独立的情境中(没有标准库,例如在操作系统开发中),使用g++会发生以下现象:
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
~Derived() {}
};
int main() {
Derived d;
}
链接时报错如下:undefined reference to operator delete(void*)
这很明显意味着,即使没有动态内存分配,g++仍然会生成对删除操作符的调用。如果析构函数不是虚函数,则不会出现这种情况。
我怀疑这与类的生成虚表有关,但我不完全确定。为什么会发生这种情况?
如果由于缺乏动态内存分配例程而不能声明删除操作符,是否有解决方法?
编辑1:
为了在g++ 5.1中成功复现问题,我使用了以下命令:
g++ -ffreestanding -nostdlib foo.cpp
g++ Testing.cpp -ffreestanding
命令。但是使用clang 3.5.0时,我遇到了一堆链接器错误。 - ChajusSaib