拷贝构造函数
C++中拷贝构造函数调用时机有三种:
1、使用一个已近创建的对象来初始化另一个新对象
2、值传递的方式给函数参数传参
3、值方式返回局部对象(有争议)
#include <iostream>
using namespace std; class Person { public: Person() { cout<<"Person默认构造函数"<<endl; } Person(const Person & p) { cout<<"Person拷贝构造函数调用"<<endl; } Person(int ans) { cout<<"Person有参构造函数"<<endl; } ~Person() { cout<<"Person析构函数调用"<<endl; } }; void test1() { Person p1(20); Person p2(p1); /* Person有参构造函数 Person拷贝构造函数调用 Person析构函数调用 Person析构函数调用 */ } void doWork(const Person p) { return; } void test2() { Person p ; doWork(p); /* Person默认构造函数 Person拷贝构造函数调用 Person析构函数调用 Person析构函数调用 */ } Person doWork2() { Person p1; cout<<(int *)&p1 <<endl; return p1; } void test3() { Person p = doWork2(); cout<<(int *)&p <<endl; /*
不同编译器产生的结果不同:
vs 2010: Person默认构造函数 00B9F60F Person拷贝构造函数调用 Person析构函数调用 00B9F703 Person析构函数调用 dev-c++: Person默认构造函数 0x70fddf 0x70fddf Person析构函数调用 */ } void test4() { Person p1; Person p2 = p1; /* Person默认构造函数 Person拷贝构造函数调用 Person析构函数调用 Person析构函数调用 */ } int main() { // test1(); // test2(); // test3(); test4(); return 0; }