按地址复制构造函数

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并不能阻止它成为复制构造函数.


Joe*_*oeG 5

暂且不说第二个构造函数不是复制构造函数 - 您实际上想知道何时调用第二个构造函数.

Foo(Foo* obj);构造是一个单一的参数的构造-因为它没有被标有explicit关键字,它从提供的隐式转换Foo*Foo.它可以在任何时候Foo*被用来代替a Foo或者const Foo&- 如果它被意外地调用,那几乎肯定是正在发生的事情.

通常,单个参数构造函数应该是复制构造函数(其他答案已解释)或应标记explicit.应谨慎使用提供隐式转换的构造函数.