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

📅  最后修改于: 2022-05-13 01:54:24.285000             🧑  作者: Mango

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

复制构造函数是一个成员函数,它使用同一类的另一个对象来初始化一个对象。 Copy 构造函数主要在从现有对象创建新对象时调用,作为现有对象的副本。

在 C++ 中,可能会在以下情况下调用复制构造函数:

1)当类的对象按值返回时。
2)当类的对象通过值作为参数传递(给函数)时。
3)当一个对象是基于同一类的另一个对象构造时。
4)当编译器生成一个临时对象时。

例子:

C++
// CPP Program to demonstrate the use of copy constructor
#include 
#include 
using namespace std;
  
class storeVal {
public:
    // Constructor
    storeVal() {}
    // Copy Constructor
    storeVal(const storeVal& s)
    {
        cout << "Copy constructor has been called " << endl;
    }
};
  
// Driver code
int main()
{
    storeVal obj1;
    storeVal obj2 = obj1;
    getchar();
    return 0;
}


输出
Copy constructor has been called 

但是,不能保证在所有这些情况下都会调用复制构造函数,因为 C++ 标准允许编译器在某些情况下优化复制,例如返回值优化(有时称为RVO )。