按位和成员复制有什么区别?当然,如果您复制成员,那么您最终会复制代表成员的位?
答案 0 :(得分:4)
class MyClass
{
public:
MyClass () : m_p (new int (5)) {}
~MyClass () {delete m_p;}
int* m_p;
};
MyClass a;
MyClass b;
memcpy (&a, &b, sizeof (a));
我刚刚在'a'中泄漏了已分配的int,重写了它的成员变量而没有先释放它。现在'a'和'b'有一个指向同一内存位置的m_p,两者都会在销毁时删除该地址。删除该内存的第二次尝试将崩溃。
答案 1 :(得分:2)
两者都是相同的,因此如果所有子对象都是可复制的,那么整个对象都是可以轻易复制的。 (类(子)对象也不能具有虚拟成员函数或虚拟基类。)
答案 2 :(得分:1)
如果您是二进制复制对象,则可能存在不应复制的内部参考计数器等。按位复制会破坏这一点。会员副本将使用正确的功能。
答案 3 :(得分:0)
按位复制引用或指针类型成员时可能会遇到麻烦。取决于你真正需要的东西,可以通过为生成的类实例设置浅或深的副本来处理。