【发布时间】:2017-10-02 12:25:17
【问题描述】:
class SomeClass
{
public:
int SomeFunc();
virtual void DoSomeThing();
void Copy(MyContainer* container)
{
//Is this line OK?
//why not memcpy(container->data, this, sizeof(SomeClass) ?
memcpy(&container->data, this, sizeof(SomeClass));
}
SomeClass* GetFromCopy(MyContainer* container)
{
//And this ?
return (KLunaBase*)&container->pData;
}
void Test()
{
MyContainer* cont = NULL;
container = malloc(sizeof(cont) - sizeof(cont->data) + size);
Copy(cont);
}
private:
int a;
int b;
SomeOtherClass objA;
}
struct MyContainer
{
const void* data;
}
我看过一些历史代码,上面简化了,函数Copy和GetFromCopy我看不懂。
我知道 POD 类可以复制,但是如果该类有虚函数和引用成员对象呢?
对不起我的英语不好。
【问题讨论】:
-
不,不,绝对不是。
-
警告:重复问题的答案充其量是无益的,最坏的情况是具有误导性。如果
SomeClass可以简单地复制,那么编译器实现的复制构造函数无论如何都会以这种方式工作。使用memcpy将数组复制为一个块有一些巧妙的技巧,但答案是“使用std::vector它将在有效的情况下执行此操作(并且在移动情况下更好)”。正确使用类型系统和模板,所有这些决定都会为您有效地做出。 -
另外,你为什么使用
malloc?那是您错过的另一个问题。malloc所做的只是分配内存——它不创建对象。停止将 C 的处理方式与 C++ 混合。
标签: c++