ani*_*ish 1 c++ pass-by-reference copy-constructor
我有两个副本构造函数
Foo(Foo &obj){
}
Foo(Foo *obj){
}
Run Code Online (Sandbox Code Playgroud)
什么时候第二个拷贝构造函数会被调用?
小智 10
不,你没有 - 你有一个复制构造函数
Foo( Foo * obj );
Run Code Online (Sandbox Code Playgroud)
不是复制构造函数,并且C++编译器永远不会使用它.你当然可以自己使用它:
Foo a;
Foo b( & a ); // use your constructor
Run Code Online (Sandbox Code Playgroud)
另请注意,您的真实副本构造函数应声明为;
Foo( const Foo & f );
Run Code Online (Sandbox Code Playgroud)
虽然缺少const并不能阻止它成为复制构造函数.
暂且不说第二个构造函数不是复制构造函数 - 您实际上想知道何时调用第二个构造函数.
的Foo(Foo* obj);构造是一个单一的参数的构造-因为它没有被标有explicit关键字,它从提供的隐式转换Foo*到Foo.它可以在任何时候Foo*被用来代替a Foo或者const Foo&- 如果它被意外地调用,那几乎肯定是正在发生的事情.
通常,单个参数构造函数应该是复制构造函数(其他答案已解释)或应标记explicit.应谨慎使用提供隐式转换的构造函数.
| 归档时间: |
|
| 查看次数: |
320 次 |
| 最近记录: |