C++自定义数据类型深入解析
1. 复制构造函数的实现
复制构造函数必须接受一个相同类类型的参数,并以适当的方式创建一个副本。但直接编写可能会导致问题,例如:
Box::Box(Box box) : length {box.length}, width {box.width}, height {box.height} // Wrong!!
{}
当调用此构造函数时,参数是按值传递的。由于参数是 Box 对象,编译器会调用 Box 类的复制构造函数来创建参数的副本。这个过程会不断递归调用复制构造函数,导致无限递归,编译器将不允许此代码编译。
为避免此问题,复制构造函数的参数必须是引用。通常,复制构造函数应使用 const 引用参数,示例如下:
Box::Box(const Box& box) : length {box.length}, width {box.width}, height {box.height}
{}
这样,参数不再按值传递,避免了复制构造函数的递归调用。参数使用 const 是因为复制构造函数仅用于创建副本,不应修改原始对象。 const 引用参数允许复制 const 和非 const 对象。
复制构造函数的通用形式如下:
超级会员免费看
订阅专栏 解锁全文
2019

被折叠的 条评论
为什么被折叠?



