📜  什么时候在 C++ 中调用复制构造函数?(1)

📅  最后修改于: 2023-12-03 15:06:23.940000             🧑  作者: Mango

什么时候在 C++ 中调用复制构造函数?

在 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++ 中,复制构造函数是当一个对象被初始化为另一个对象、作为参数传递给一个函数或作为返回值从函数中返回时调用的。掌握这些使用情况可以帮助开发者更好地理解和使用复制构造函数。