12.2.3 拷贝构造函数的调用时机

    技术2024-01-27  93

    12.2.3 拷贝构造函数的调用时机

    只要在用一个类对象给另一个类对象赋值时,都会调用拷贝构造函数。 通常在以下两种情况调用:

    作为函数参数时;返回局部对象时。

    我们来看两个示例演示这两种情况: 首先创建一个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; };

    1、作为函数参数时

    写一个函数,参数为person类,不用做具体实现:

    void test1(person p) } }

    然后我们在主函数调用test1():

    int main() { person p; test1(p); system("pause"); return 0; }

    运行结果:

    第一行是创建p时调用的默认构造函数;第二行是调用test1时,将实参拷贝给形参调用的拷贝构造函数;第三行是test1调用结束时释放形参对象调用的析构函数。实参p没有释放是因为main函数还没有执行完毕,因为程序会停留在system(“pause”)。

    2、返回局部对象时

    写一个函数,返回person对象:

    person test2() { person p; return p; }

    然后在主函数调用test2():

    int main() { test2(); system("pause"); return 0; }

    第一行的默认构造函数调用是test2()里创建p时调用的;第二行是返回p对象时调用的,用一个临时对象来接收;第三行是test2()调用结束释放p对象调用的;第四行是当前行执行完毕后释放临时对象。
    Processed: 0.028, SQL: 9