只要在用一个类对象给另一个类对象赋值时,都会调用拷贝构造函数。 通常在以下两种情况调用:
作为函数参数时;返回局部对象时。我们来看两个示例演示这两种情况: 首先创建一个person类:
#include <iostream> using namespace std; class person { public: person() { cout << "person的默认构造函数调用" << endl; } person(int age) { m_age = age; cout << "person的有参构造函数调用" << endl; } person(const person&p) { m_age = p.m_age; cout << "person的拷贝构造函数调用" << endl; } ~person() { cout << "person的析构函数调用" << endl; } int m_age; };写一个函数,参数为person类,不用做具体实现:
void test1(person p) } }然后我们在主函数调用test1():
int main() { person p; test1(p); system("pause"); return 0; }运行结果:
第一行是创建p时调用的默认构造函数;第二行是调用test1时,将实参拷贝给形参调用的拷贝构造函数;第三行是test1调用结束时释放形参对象调用的析构函数。实参p没有释放是因为main函数还没有执行完毕,因为程序会停留在system(“pause”)。写一个函数,返回person对象:
person test2() { person p; return p; }然后在主函数调用test2():
int main() { test2(); system("pause"); return 0; } 第一行的默认构造函数调用是test2()里创建p时调用的;第二行是返回p对象时调用的,用一个临时对象来接收;第三行是test2()调用结束释放p对象调用的;第四行是当前行执行完毕后释放临时对象。