C++中默认操作怎么定义

技术C++中默认操作怎么定义本篇内容主要讲解“C++中默认操作怎么定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++中默认操作怎么定义”吧!C.21:默认操作要定义就全

本文主要讲解“如何在C语言中定义默认操作”。感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“如何在C语言中定义默认操作”!

C.21:默认操作要定义就全定义,要禁止就全禁止

Reason(原因)

特殊成员函数包括构造函数、复制构造函数、复制赋值运算符、移动构造函数、移动赋值运算符和析构函数。

注意:这些功能负责管理数据成员的生命周期,所以是实现还是禁止需要统一。

特殊函数的语义密切相关。如果一个需要声明,也许其他的需要考虑。

定义除默认构造函数之外的所有特殊函数,即使采用=default或=delete的形式,也会抑制移动构造函数和移动赋值运算符的隐式声明。即使以=default或=delete的形式声明移动构造函数或移动赋值运算符,也会导致隐式生成的复制构造函数或复制赋值运算符被定义为=delete。因此,一旦声明了任何特殊函数,就应该声明其他函数,以避免不必要的影响。例如,将所有潜在的移动操作变成昂贵的复制操作,或者只移动这个类。

Example, bad(反面示例)

结构M2 { //bad:默认操作集不完整

公众号:

//.

//.没有复制或移动操作.

~M2() {删除[]代表;}

私人:

pairint,int * rep//以零结尾的成对集合

};

无效使用()

{

M2十号;

M2 y;

//.

x=y;//默认分配

//.

}假设析构函数需要那个“特殊模式”(这里是释放内存),那么复制和移动赋值(两者都会隐式破坏对象)的可能性就会非常低。

00-1010这是大家熟知的‘5特殊函数规则’或‘6特殊函数规则’,区别在于是否包含默认构造函数。

Note(注意)

如果您需要默认操作的默认实现(例如,定义了其他非默认操作),请使用=default表示您打算这样做。如果不想使用默认操作,general=delete会抑制其生成。

注意:例如,如果定义了某种形式的构造函数,编译器将不会生成默认的构造函数。

Example, good(示例)

如果需要声明析构函数,直接定义为虚函数,可以作为默认值。为了避免抑制隐式移动操作,还必须声明它们。为了避免类成为只允许移动(禁止复制)的类型,复制操作还必须声明:

类抽象库()

公众号:

virtual ~AbstractBase()=默认值;

abstract base(const abstract base)=默认值;

AbstractBase运算符=(const AbstractBase)=默认值;

AbstractBase(抽象基础)=默认值;

抽象基运算符=(抽象基)=默认值;

};为了避免规则C.67造成的差异,复制和移动运算符也可以定义为删除。

类ClonableBase {

公众号:

virtual unique_ptrClonableBase克隆()const

virtual ~ClonableBase()=默认值;

clonable base(const clonable base)=delete;

ClonableBase运算符=(const clonable base)=delete;

clonable base(clonable base)=delete;

ClonableBase运算符=(clonable base)=delete;

};只有定义了移动操作或复制操作才会产生同样的效果,但每个特殊功能的用途都要说清楚,让读者更容易理解。

00-1010编译器将强制执行该规则的大部分内容,并且理想情况下会警告任何违规行为。

Note(注意)

强烈反对带有析构函数的类依赖隐式生成的复制操作。

00-1010同时编写6个特殊成员函数容易出错。请注意以下代码中的参数类型。

X类{

公众号:

//.

虚~X()=默认值;//析构函数(如果X是基类,则为虚函数)

X(常量X)=默认值;//复制构造函数

X运算符=(常量X)=默认值;//复制分配

X(X)=默认值;//移动构造函数

X运算符=(X)=默认值;//移动分配

};小错误(如拼写错误、缺少常量、使用代替或缺少特殊成员函数)会导致错误或警告。为了避免枯燥的代码和可能出现的错误,尽量练习‘0特殊函数’的原理。

Enforcement(实施建议)

(简单)一个类要么声明(甚至通过=delete)所有的特殊函数,要么一个都不声明。

至此,相信大家对“C语言中如何定义默认操作”有了更深的理解,那么就来一个实操吧!这是网站。更多相关内容,可以去相关渠道查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/124816.html

(0)

相关推荐

  • consumer自带函数式接口(console接口是常用接口吗)

    技术基于Consumer接口、Predicate接口初使用是怎样的这篇文章将为大家详细讲解有关基于Consumer接口、Predicate接口初使用是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这

    攻略 2021年12月20日
  • php数据类型的永久转换函数是哪个

    技术php数据类型的永久转换函数是哪个本篇内容主要讲解“php数据类型的永久转换函数是哪个”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php数据类型的永久转换函数是哪个”吧

    攻略 2021年12月13日
  • 真心话劲爆污,你还剩几个能说心里话的朋友

    技术真心话劲爆污,你还剩几个能说心里话的朋友应该没有了真心话劲爆污,随着年龄的增加,越来越不想跟别人说什么,说了也会莫名其妙的惹些烦恼!心里话,只能自己消耗,并不能跟别人说,说多了自寻烦恼而已。而且一般心里话都是一些烦恼

    2021年10月20日
  • 6英尺是多少厘米,六英尺三英寸,大约合多少厘米

    技术6英尺是多少厘米,六英尺三英寸,大约合多少厘米六英尺三英寸 = 190.5 cm6英尺是多少厘米。分析过程如下:1 foot 英尺(呎) = 0.00018939393939394miles(英里)=12 inche

    生活 2021年10月25日
  • 飞机商务舱和头等舱区别,公务舱和商务舱价格区别

    技术飞机商务舱和头等舱区别,公务舱和商务舱价格区别头等舱和商务舱的区别飞机商务舱和头等舱区别:位置头等舱一般设在客舱的前部,座椅的尺寸和前后间距都比较大,长航线甚至会采用平躺式座椅;与头等舱相比,商务舱设在客舱的中部,商

    生活 2021年10月27日
  • hadoop学习笔记之-hbase完全分布模式安装-5

    技术hadoop学习笔记之-hbase完全分布模式安装-5 hadoop学习笔记之-hbase完全分布模式安装-5http://blog.csdn.net/lichangzai/article/deta

    礼包 2021年12月22日