Rav*_*pta 9 c++ copy-constructor
我正在学习C++,正在从中读取复制构造函数C++: The Complete Reference.书上写着
允许复制构造函数具有其他参数,只要它们具有为其定义的默认参数即可.但是,在所有情况下,第一个参数必须是对执行初始化的对象的引用.
但我很困惑,我们将如何通过这些额外的参数?我相信应该有一些方法没有在书中给出,我无法弄清楚.谁能帮我吗?
编辑: 也可以在所有三种情况下传递这些额外的参数,即
jxh*_*jxh 13
这是一个简单的例子:
class A {
//...
public:
A (const A&, bool deep = false) {
if (!deep) { /* make a shallow copy */ }
else { /* make a deep copy */ }
}
};
void foo (A x) { /*...*/ }
A bar () { /*...*/ return A(); }
A a_var;
Run Code Online (Sandbox Code Playgroud)
在此示例中,参数默认为false,这意味着默认的复制构造函数将是浅的.
A b(a_var); // b gets a shallow copy of a
foo(b); // foo() receives a shallow copy
Run Code Online (Sandbox Code Playgroud)
但是,可以通过在第二个参数中传入true来实现深层复制.
A b(a_var, true); // b gets a deep copy of a
foo(A(b, true)); // foo receives a shallow copy of a deep copy
Run Code Online (Sandbox Code Playgroud)
类似地,对于返回a的函数A,返回的副本将是浅的,因为它使用默认值,但是接收器可以在接收它时使其变深.
A b(bar()); // shallow
A b(bar(), true); // deep
Run Code Online (Sandbox Code Playgroud)
请记住,当您定义复制构造函数时,很可能意味着您需要定义析构函数并重载赋值运算符(三个规则).
| 归档时间: |
|
| 查看次数: |
2502 次 |
| 最近记录: |