C++ 按位与按成员复制?

use*_*112 5 c++ copy-constructor

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

cpp*_*guy 5

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));
Run Code Online (Sandbox Code Playgroud)

我只是通过重写它的成员变量而不先释放它来泄漏 'a' 中分配的 int。现在 'a' 和 'b' 有一个指向同一个内存位置的 m_p,两者都将在销毁时删除该地址。第二次尝试删除该内存将崩溃。


Joe*_*rgB 5

  • 按位复制:将对象的对象表示形式复制为未解释的字节序列。
  • 成员复制:根据对象的类型复制对象的每个子对象。对于具有重要复制构造函数的对象,这意味着调用复制构造函数。对于普通可复制类型的子对象,这意味着按位复制。

两者是相同的,因此如果所有子对象都是普通可复制的,则整个对象也是普通可复制的。(类(子)对象也不得具有虚拟成员函数或虚拟基类。)


Que*_*nUK 1

如果您对对象进行二进制复制,则可能存在不应复制的内部结构,例如引用计数器。按位复制会打破这一点。成员副本将使用正确的功能。