Ale*_*lex 16 c++ copy-constructor
我对复制构造函数的机制有点困惑.如我错了请纠正我:
如果一个方法将一个对象的引用作为参数,并且该类定义了一个复制构造器,那么该类使用构造函数来创建自身的副本,并将其传递给函数而不是对原始对象的引用?
此外,人们可以打电话
Object * obj = new Object(&anotherObject);
Run Code Online (Sandbox Code Playgroud)
创建另一个对象的副本?
小智 27
不,如果函数需要参考:
void f1( Object & o ); // call by reference
Run Code Online (Sandbox Code Playgroud)
然后没有复制.如果函数采用值:
void f2( Object o ); // call by value
Run Code Online (Sandbox Code Playgroud)
然后编译器使用复制构造函数创建一个副本.
是的,当你说:
Object * obj = new Object(anotherObject); // not &anotherObject
Run Code Online (Sandbox Code Playgroud)
显式使用复制构造函数(假设anotherObject的类型为Object.)new然而,在这里使用没有什么神奇之处- 在这种情况下:
Object obj2(anotherObject);
Run Code Online (Sandbox Code Playgroud)
也使用了复制构造函数.
如果方法将对象的引用作为参数,则不会调用复制构造函数.如果是这种情况,那么对复制构造函数本身的调用将导致无限循环(因为它将引用作为参数).
该行不是调用复制构造函数的有效方法.它期望引用作为参数,而不是指针.
| 归档时间: |
|
| 查看次数: |
30049 次 |
| 最近记录: |