Copy constructor with more than one parameter
我正在学习C++,并从EDCOX1 0中读取复制构造函数。书上说
It is permissible for a copy constructor to have additional parameters as long as they have default arguments defined for them. However, in all cases the first parameter must be a reference to the object doing the initializing.
但我很困惑,我们将如何通过这些附加参数?我相信应该有一些方法是书中没有给出的,我也不知道。有人能帮我吗?
编辑:另外,在这三种情况下是否可以传递这些额外的参数,即
- 当一个对象显式初始化另一个对象时,例如在声明中
- 当对象的副本被传递给函数时
- 生成临时对象时(通常作为返回值)
下面是一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 | 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; |
在本例中,参数默认为false,这意味着默认的复制构造函数将很浅。
1 2 | A b(a_var); // b gets a shallow copy of a foo(b); // foo() receives a shallow copy |
但是,可以通过在第二个参数中传递true来实现深度复制。
1 2 | 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 |
同样,对于返回
1 2 | A b(bar()); // shallow A b(bar(), true); // deep |
记住,当您定义一个复制构造函数时,很可能意味着您需要定义一个析构函数并重载赋值运算符(三个规则)。
这样想:只有构造函数的概念。当编译器决定需要创建一个副本时,它会寻找一个可以通过传入一个