按位复制和按成员复制有什么区别?当然,如果您复制成员,那么您最终还是会复制代表成员的位?
问问题
5170 次
4 回答
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));
我只是通过重写它的成员变量而不先释放它而泄漏了“a”中分配的int。现在 'a' 和 'b' 有一个 m_p 指向相同的内存位置,并且两者都会在销毁时删除该地址。第二次尝试删除该内存将崩溃。
于 2013-02-27T22:20:35.057 回答
4
- 按位复制:将对象的对象表示复制为未解释的字节序列。
- 成员复制:根据对象的类型复制对象的每个子对象。对于具有非平凡复制构造函数的对象,这意味着调用复制构造函数。对于普通可复制类型的子对象,这意味着按位复制。
两者都是相同的,因此如果所有子对象都是可平凡复制的,则整个对象都是可平凡复制的。(类(子)对象也不能有虚成员函数或虚基类。)
于 2013-02-27T22:27:32.900 回答
1
如果您正在二进制复制对象,则可能存在不应复制的内部结构,例如引用计数器。按位复制会破坏这一点。成员副本将使用正确的功能。
于 2013-02-27T22:16:52.247 回答
0
当按位复制引用或指针类型成员时,您可能会遇到麻烦。取决于您真正需要什么,并且可以通过对结果类实例进行浅拷贝或深拷贝来处理。
于 2013-02-27T22:19:05.917 回答