📅  最后修改于: 2023-12-03 15:06:23.940000             🧑  作者: Mango
在 C++ 中,当一个对象被初始化为另一个对象时,或者当一个对象作为参数传递给一个函数时,都会调用其复制构造函数。这里有几种情况需要注意:
当一个对象被初始化为另一个对象时,会调用其复制构造函数。例如:
class Foo {
public:
Foo(const Foo& other) {
// 复制构造函数
}
};
Foo bar;
Foo baz(bar); // 调用Foo的复制构造函数
当一个对象作为参数被传递给一个函数时,也会调用其复制构造函数。例如:
void f(Foo arg) {
// ...
}
Foo bar;
f(bar); // 调用Foo的复制构造函数
当一个对象作为返回值从函数中返回时,也会调用其复制构造函数。例如:
class Foo {
public:
Foo() { /* ... */ }
Foo(const Foo& other) { /* ... */ }
};
Foo f() {
Foo bar;
return bar; // 调用Foo的复制构造函数
}
需要注意的是,如果返回的对象被编译器优化掉了,则不会调用其复制构造函数。例如:
class Foo {
public:
Foo() { /* ... */ }
Foo(const Foo& other) { /* ... */ }
};
Foo f() {
return Foo(); // 不调用Foo的复制构造函数
}
在 C++ 中,复制构造函数是当一个对象被初始化为另一个对象、作为参数传递给一个函数或作为返回值从函数中返回时调用的。掌握这些使用情况可以帮助开发者更好地理解和使用复制构造函数。