复制构造函数- c++按位复制与按成员复制
copy constructor - C++ bitwise vs memberwise copying?
按位复制和按成员复制的区别是什么?当然,如果你复制成员那么你最终会复制代表成员的比特?
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,并且在销毁时都将删除该地址。第二次尝试删除内存将会崩溃。
- 按位复制:将对象的对象表示复制为未解释的字节序列。
- 成员复制:根据对象的类型复制对象的每个子对象。对于具有重要复制构造函数的对象,这意味着调用复制构造函数。对于普通可复制类型的子对象,这意味着按位复制。
两者是相同的,因此如果所有子对象都是可复制的,则整个对象是可复制的。(类(子)对象也不能有虚成员函数或虚基类。)
如果您是二进制复制对象,那么可能存在不应该复制的内部结构,例如引用计数器。按位复制会破坏这一点。成员副本将使用正确的函数。
按位复制引用类型或指针类型成员时可能会遇到麻烦。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 访问类成员而不复制此变量或互斥变量
- std::ofstream 作为类成员删除复制构造函数?
- 正在复制具有未初始化成员的结构
- 直接初始化不可复制、不可移动的成员,而不使用聚合初始化
- 具有 STL 向量类型成员的类的复制内存
- 是否可以将不可复制的成员用作使对象不可复制的替代方法?
- 将C++浮点数组成员直接封送到 C#,而无需复制
- 在临时将成员带出时省略复制/移动
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- C++ 阻止复制成员数据
- C++列表:复制成员列表中的本地列表
- 使用模板类复制成员函数
- 即使复制构造函数由于 RVO 在C++中未被调用,如何复制成员变量的值
- 具有不可复制成员的类的聚合初始化
- 请参阅 TC++PL 第 3 版的第 10.4.6.3 节"复制成员"
- 初始化不可复制成员
- 关于包含不可复制成员引用的类的复制构造函数的建议
- 错误到底是什么,对于错误地调用可移动和不可复制成员的复制构造函数有什么解决方法