C++构造、析构、拷贝构造、拷贝赋值、移动构造、移动赋值之三

本文详细介绍了C++类对象的资源管理,包括默认构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数和移动赋值运算符。讨论了何时会隐式抑制这些默认函数,以及如何显式定义和抑制它们。此外,还提到了默认函数的默认操作,即浅拷贝和浅移动,并指出显式抑制默认函数定义的重要性。
摘要由CSDN通过智能技术生成

 

作为C++类对象的资源管理的最后一部分,详细介绍一下类中可以默认添加的构造、析构、拷贝构造、拷贝赋值、移动构造以及移动赋值函数。

1.默认函数形式

Default Constructor:        T()
Default Copy Constructor:   T(const T&)
Default Assignment:         T& operator= (const T&)
Default Move Constructor:   T(T&&)
Default Move Assignment:    T& operator= (T&&)
Default Destructor:         ~T()

2.隐式抑制默认函数的定义

遵循以下两个原则:

如果类中显式定义了构造函数,默认构造函数被自动抑制。

如果类中显式定义了拷贝操作、移动操作、析构函数中的任何一个,默认的拷贝、移动和析构函数全部被自动抑制(为了兼容legacy code,实际中,如果定义了析构函数,默认的拷贝和移动操作仍然会提供)。

3.显式定义默认函数

在函数声明后加上=default,来显式的说明,这是一个默认的构造函数。

注意,如果只是想使用默认的函数的功能,最好使用默认的,而不要人为的重复定义一个。这样不仅啰嗦,而且容易出错(遗漏成员等)。

4.默认函数的默认操作

默认函数的操作,都是对目标对象进行浅拷贝(浅移动),或者叫做“member-wise”。对于默认的移动操作来说,源对象中的built-in类型的成员不发生改变,对编译器来说,这样效率最高。

5.显式抑制默认函数的定义

使用=delete来标识一个函数定义被禁用。可以标识类中声明的函数,也可以标识任意的函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值