什么时候在 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 )。
Note: C++ compiler implicitly provides a copy constructor, if no copy constructor is defined in the class.