gpt4 book ai didi

c++ - 为什么虚拟函数在分配给 'new' 时不能未实现?

转载 作者:可可西里 更新时间:2023-11-01 17:10:53 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com