我有一个结构/类是部分原始数据(POD)。
struct S {
// plain-old-data structs with only arrays and members of basic types (no pointers);
Pod1 pod1;
Pod2 pod2;
Pod3 pod3;
Pod4 pod4;
vector<int> more;
};
我经常复制S类的对象。
我想用memcpy复制它,但是S::more阻止了它。
我想避免调用4个memcpy,而只用一个就可以提高性能。
我应该这样做吗?
memcpy(s1, s2, sizeof(Pod1) + sizeof(Pod2) + sizeof(Pod3) + sizeof(Pod4);
我不能将它们打包在单独的结构中,因为它将破坏所有使用pod1-pod4的代码。
最好的解决方案是什么?
最佳答案
最好的解决方案是依靠C++自动复制构造函数和复制运算符。这样,编译器就有机会了解您的代码并对其进行优化。尝试避免在C++代码中使用memcpy。
如果只需要复制结构的一部分,请为其创建一个方法:
struct S {
// plain-old-data structs with only arrays and members of basic types (no pointers);
Pod1 pod1;
Pod2 pod2;
Pod3 pod3;
Pod4 pod4;
vector<int> more;
};
void copyPartOfS(S& to, const S& from)
{
s.pod1 = from.pod1;
s.pod2 = from.pod2;
s.pod3 = from.pod3;
s.pod4 = from.pod4;
}
...
S one, two;
one = two; // Full copy
copyPartOfS(one, two); // Partial copy