C ++按位与成员复制?

时间:2013-02-27 22:14:19

标签: c++ copy-constructor

按位和成员复制有什么区别?当然,如果您复制成员,那么您最终会复制代表成员的位?

4 个答案:

答案 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)

按位复制引用或指针类型成员时可能会遇到麻烦。取决于你真正需要的东西,可以通过为生成的类实例设置浅或深的副本来处理。