c++中的拷贝构造函数调用时机通常有三种情况
1.使用一个已经创建完毕的对象来初始化一个新的对象
2.值传递的方式给函数参数传值
3.以值方式返回局部对象
//情况1
class Person { public: Person(){ std::cout <<"无参数构造函数" << std::endl; mAge = 0; } Person(int age){ std::cout << "有参数构造函数" << std::endl; } Person(const Person& p){ std::cout << "拷贝构造函数" << std::endl; mAge = p.mAge; } int mAge; }; void test(Person p) // 形参是以值传递的方式时,会创建参数的副本 { } int main() { Person p; Person p1(p) } //执行结果如下 /*调用无参数构造函数 调用拷贝构造函数 调用析构函数 调用析构函数*/
//情况2
class Person { public: Person(){ std::cout <<"无参数构造函数" << std::endl; mAge = 0; } Person(int age){ std::cout << "有参数构造函数" << std::endl; } Person(const Person& p){ std::cout << "拷贝构造函数" << std::endl; mAge = p.mAge; } int mAge; }; void test(Person p) // 形参是以值传递的方式时,会创建参数的副本 { } int main() { Person p; test(p) } //执行结果如下 /*调用无参数构造函数 调用拷贝构造函数 调用析构函数 调用析构函数*/
//情况3
class Person { public: Person(){ std::cout <<"无参数构造函数" << std::endl; mAge = 0; } Person(int age){ std::cout << "有参数构造函数" << std::endl; } Person(const Person& p){ std::cout << "拷贝构造函数" << std::endl; mAge = p.mAge; } int mAge; }; Person test() // 形参是以值传递的方式时,会创建参数的副本 {
Person p; return p; } int main() { Person p; test() } //执行结果如下 /*调用无参数构造函数 调用拷贝构造函数 调用析构函数 调用析构函数*/
标签:cout,class,Person,拷贝,public,构造函数 From: https://www.cnblogs.com/duzw/p/16585739.html