C++---构造函数,拷贝构造函数,赋值函数

新建C++的类,编译器会加入以下默认的成员函数:

·默认构造函数和拷贝构造函数

·析构函数

·赋值函数(赋值运算符)

1.构造函数

作用:用来对类的数据成员进行初始化和分配内存。

2.拷贝构造函数

C++独有的,是一种特殊的构造函数,用与对该类的对象构造和初始化,即初始化该对象的一块内存区域;

系统默认的拷贝构造函数是浅拷贝,如果需要深拷贝,则需要自己定义拷贝构造函数。如果用户定义了拷贝构造函数,编译器就不再生成拷贝构造函数。

浅拷贝最担心的问题是指针的拷贝,只拷贝了指针的地址,指向的空间内容并没有复制,而是由两个对象共用。

使用拷贝构造函数的时机:

1)一个对象以值传递的方式传入函数体;

2)一个对象以值传递的方式从函数返回;

3)一个对象需要通过另一个对象进行初始化;

CData d1;
CData d2(d1);//拷贝构造函数,d2对象是不存在的,是用d1对象来构造和初始化的
CData d3 = d1;//拷贝构造函数,d3对象是不存在的,是用d1对象来构造和初始化的
//拷贝构造函数重载声明如下: 

A (const A&other)

3.赋值函数

用与一个类的对象向该类的另一个对象赋值,是对于一个已经被初始化过的对象来进行赋值操作。

在赋值时,如果原来的对象中有内存分配要先把内存释放掉,还要检察一下两个对象是不是同一个对象,如果是,不做任何操作,直接返回。

CData d1;
CData d2;
CData d2 = d1;//赋值构造函数
赋值运算的重载声明如下:

 A& operator = (const A& other)

4、禁用拷贝与赋值

如果不想写拷贝构造函数和赋值函数,又不允许使用编译器生成的缺省函数,处理办法如下:

class CData
{
	CData();
	//C++11
	CData(const CData& _modebus) = delete;
	CData& operator = (const CData&) = delete;
	~CData();
};

class CData
{
	CData();
	~CData();

private:
	CData(const CData& _modebus);
	CData& operator = (const CData&);
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值