天天看點

拷貝構造函數調用實際

拷貝構造函數調用實際

C++中拷貝構造函數調用時機通常有三種情況

使用一個已經建立完畢的對象來初始化一個新對象

值傳遞的方式給函數參數傳值

以值的方式傳回局部對象

代碼示例:

#include <iostream>
using namespace std;
//
//C++中拷貝構造函數調用時機通常有三種情況
//*
//使用一個已經建立完畢的對象來初始化一個新對象
//*
//值傳遞的方式給函數參數傳值
//*
//以值的方式傳回局部對象
class Person
{
public:
       Person()
       {
              cout << "Person預設構造函數調用" << endl;
       }
       Person(int age)
       {
              cout << "Person有參構造函數調用" << endl;
              m_Age = age;
              
       }
       Person(const Person &p)
       {
              cout << "Person拷貝構造函數調用" << endl;
              m_Age = p.m_Age;
       }
       ~Person()
       {
              cout << "Person析構函數調用" << endl;
       }
       int m_Age;
};
//1.使用一個已經查建立完畢的對象來初始化一個新對象
void test01()
{
       Person p1(20);
       Person p2(p1);
       //cout << "P2的年齡為:" << p2.m_Age << endl;
}
//2.值傳遞的方式給函數參數傳值
void doWork(Person p)
{
       
}
void test02()
{
       Person p;
       doWork(p);
}
//3.值方式傳回局部對象
Person doWork2()
{
       Person p1;
       cout << (int*)&p1 << endl;
       return p1;
}
void test03()
{
       Person p=doWork2();
       cout << (int*)&p << endl;
       doWork(p);
}
int main()
{
       //test01();
       //test02();
       test03();
       return 0;
}