09 大话设计模式C++实现之原型模式之理解深拷贝和浅拷贝

本文介绍了C++中构造函数的调用规则,重点关注了默认构造函数和拷贝构造函数。深入探讨了浅拷贝和深拷贝的概念,指出浅拷贝可能导致的问题以及C++中解决这些问题的方法,强调了手动编写拷贝构造函数的重要性。同时,讨论了对象初始化列表的使用场景和注意事项,以及构造函数和析构函数的调用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1. 赋值构造函数的四种调用场景(调用时机)

场景1:

#include "iostream"

using namespace std;

 

class AA

{

public:

         AA() //无参构造函数 默认构造函数

         {      

                  cout<<"我是构造函数,自动被调用了"<<endl;

         }

         AA(int _a) //无参构造函数 默认构造函数

         {      

                  a = _a;

         }

        AA(const AA &obj2)

        {

                cout<<"我也是构造函数,我是通过另外一个对象obj2,来初始化我自己"<<endl;

                a = obj2.a + 10;

        }

         ~AA()

         {

                  cout<<"我是析构函数,自动被调用了"<<endl;

         }

         void getA()

         {

                  printf("a:%d \n", a);

         }

protected:

private:

         int a;

};

//单独搭建一个舞台

void ObjPlay01()

{

         AA a1; //变量定义

        

         //赋值构造函数的第一个应用场景

         //用对象1 初始化 对象2

         AA a2 = a1; //定义变量并初始化 //初始化法

 

         a2 = a1; //用a1来=号给a2 编译器给我们提供的浅copy

}

 

 

场景2:

第二个应用场景

//单独搭建一个舞台

void ObjPlay02()

{

         AA a1(10); //变量定义

 

         //赋值构造函数的第一个应用场景

         //用对象1 初始化 对象2

         AA a2(a1); //定义变量并初始化 //括号法

 

         //a2 = a1; //用a1来=号给a2 编译器给我们提供的浅copy

         a2.getA();

}

//注意:初始化操作等号操作 是两个不同的概念

 

场景3:

#include "iostream"

using namespace std;

 

class Location

{

public:

         Location( int xx = 0 , int yy = 0 )

         {

                  X = xx ;  Y = yy ;  cout << "Constructor Object.\n" ;

         }

         Location( const Location & p )  &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值