gpt4 book ai didi

c++ - 当从这个 memcpy 到子类中的新对象时,警告 "destination for this ' memcpy' call is a pointer to dynamic class ...”显示

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:14 36 4
gpt4 key购买 nike

我将创建一些具有虚拟复制功能的父类和子类,它返回自身的拷贝:

class A{
public:
int ID;
virtual A* copy(){
return new A();
}
}

class B : public A{
public:
int subID;
virtual A* copy(){
B* b=new B();
memcpy(b,this,sizeof(B));
return b;
}
};

编译时,会显示以下警告:

destination for this 'memcpy' call is a pointer to dynamic class 'B' ; vtable pointer will be overwritten
explicitly cast the pointer to silence this warning

这个警告是什么意思,它会导致什么潜在问题?

最佳答案

意思是这样不行。不应使用 C 库的 memcpy() 函数复制 C++ 对象(在某些有限情况下除外),该函数对 C++ 类、它们的构造函数、析构函数、虚方法以及 C++ 中的所有其他内容一无所知这不是在 C 中。

你想要的是一个copy constructor .它的工作正是您想要完成的:制作现有对象的拷贝。

virtual A* copy(){
B* b=new B(*this);
return b;
}

关于c++ - 当从这个 memcpy 到子类中的新对象时,警告 "destination for this ' memcpy' call is a pointer to dynamic class ...”显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37913814/

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