struct A
{
virtual void foo(); // unused and unimplemented
virtual void bar () {}
};
int main ()
{
A obj; // ok
obj.bar(); // <-- added this edition
A* pm = (A*)malloc(sizeof(A)); // ok
A* pn = new A; // linker error
}
对于堆栈上的对象 it works fine .但是对于使用 new
(不是 malloc
)在堆上分配,它会给出链接器错误:
undefined reference to `vtable for A'
最佳答案
因为 malloc 不调用(或在这种情况下尝试调用)A 的构造函数,而 new 调用。
此代码编译并记录 GCC 链接器错误发生的位置:
#include <cstdlib>
struct A
{
virtual void foo(); // unused and unimplemented
virtual void bar () {}
};
int main ()
{
A obj; // linker error
A* pm = (A*) malloc(sizeof(A)); // ok
A* pn = new A; // linker error
}
关于c++ - 为什么虚拟函数在分配给 'new' 时不能未实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6230376/