当前位置: 首页 > 编程日记 > 正文

C++11中= delete;的使用

C++11中,对于deleted函数,编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性。

对于 C++ 的类,如果程序员没有为其定义特殊成员函数,那么在需要用到某个特殊成员函数的时候,编译器会隐式的自动生成一个默认的特殊成员函数,比如默认的构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。

为了能够让程序员显式的禁用某个函数,C++11标准引入了一个新特性:deleted函数。程序员只需在函数声明后加上”=delete;”,就可将该函数禁用

deleted函数特性还可用于禁用类的某些转换构造函数,从而避免不期望的类型转换。

deleted函数特性还可以用来禁用某些用户自定义的类的new操作符,从而避免在自由存储区创建类的对象。

必须在函数第一次声明的时候将其声明为deleted函数,否则编译器会报错。即对于类的成员函数而言,deleted函数必须在类体里(inline)定义,而不能在类体外(out-of-line)定义。

虽然defaulted函数特性规定了只有类的特殊成员函数才能被声明为defaulted函数,但是deleted函数特性并没有此限制。非类的成员函数,即普通函数也可以被声明为deleted函数

In C++11, defaulted and deleted functions give you explicit control over whether the special member functions are automatically generated.

The opposite of a defaulted function is a deleted function.

Deleted functions are useful for preventing object copying, among the rest. Recall that C++ automatically declares a copy constructor and an assignment operator for classes. To disable copying, declare these two special member functions “=delete”.

The delete specifier can also be used to make sure member functions with particular parameters aren’t called.

=default: it means that you want to use the compiler-generated version of that function, so you don't need to specify a body.

=delete: it means that you don't want the compiler to generate that function automatically.

下面是从其他文章中copy的测试代码,详细内容介绍可以参考对应的reference:

#include "delete.hpp"
#include <iostream>//
// reference: http://www.learncpp.com/cpp-tutorial/b-6-new-virtual-function-controls-override-final-default-and-delete/
class Foo
{Foo& operator=(const Foo&) = delete; // disallow use of assignment operatorFoo(const Foo&) = delete; // disallow copy construction
};class Foo_1
{Foo_1(long long); // Can create Foo() with a long longFoo_1(long) = delete; // But can't create it with anything smaller
};class Foo_2
{Foo_2(long long); // Can create Foo() with a long longtemplate<typename T> Foo_2(T) = delete; // But can't create it with anything else
};///
// reference: http://www.bogotobogo.com/cplusplus/C11/C11_default_delete_specifier.php
class A_
{
public:A_(int a){};A_(double) = delete;         // conversion disabledA_& operator=(const A_&) = delete;  // assignment operator disabled
};int test_delete1()
{A_ a_(10);     // OK// A_ b(3.14);   // Error: conversion from double to int disabled// a = b;       // Error: assignment operator disabledreturn 0;
}// reference: https://msdn.microsoft.com/zh-cn/library/dn457344.aspx
struct widget
{// deleted operator new prevents widget from being dynamically allocated.void* operator new(std::size_t) = delete;
};

GitHub:https://github.com/fengbingchun/Messy_Test

相关文章:

vue 使用scss

使用vue-cli模板创建的项目中&#xff0c;使用scss步骤 1. cmd命令&#xff1a; cnpm install sass-loader --save-devcnpm install node-sass --sava-dev2.查看package.json文件中是否已自动添加以下信息 3. 转载于:https://www.cnblogs.com/duanzhenzhen/p/10453495.html

EBS form日历可选范围设置(calendar.setup )介绍

Calendar是Template提供给我们的standard object.可以使我们方便的为日期型字段提供日期的选择列表.form中设置日历方法:1. 为日期型字段指定LOV(ENABLE_LIST_LAMP)2. 在字段的KEY–LISTVAL事件中编写代码:Calendar.showCalendar Package包含如下几个Procedure:1. Calendar.sho…

人工智能对地球环境科学的推进

一项德国耶拿[1]和汉堡[2]科学家在《自然》杂志发起的研究表明&#xff0c;人工智能可以有效地推进我们对于地球气候系统的理解。特别是在当前深度学习的潜力还未被完全开发的情况下。在人工智能的帮助下一些复杂的动态环境&#xff0c;如飓风&#xff0c;森林火灾&#xff0c;…

从概念到应用,终于有人把数据挖掘讲明白了

作者&#xff1a;陈封能&#xff08;Pang-Ning Tan&#xff09;、迈克尔斯坦巴赫&#xff08;Michael Steinbach&#xff09;等来源 | 大数据&#xff08;ID&#xff1a; hzdashuju&#xff09;【导语】数据采集和存储技术的迅速发展&#xff0c;加之数据生成与传播的便捷性&am…

C++11中default的使用

在C11中&#xff0c;对于defaulted函数&#xff0c;编译器会为其自动生成默认的函数定义体&#xff0c;从而获得更高的代码执行效率&#xff0c;也可免除程序员手动定义该函数的工作量。 C的类有四类特殊成员函数&#xff0c;它们分别是&#xff1a;默认构造函数、析构函数、拷…

Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应...

杂家前文Android颜色对照表只有颜色和十六进制&#xff0c;有时候需要设置r g b分量的int值&#xff0c;如paint.setARGB(255, 127, 255, 212);就需要自己计算下分量的各个值。这里提供一个带有r g b分量的int型的颜色表。注意paint.setAlpha()及paint.setARGB&#xff08;&…

【redis】c/c++操作redis(对于hiredis的封装)

前言 最近一直在学习redis&#xff0c;通过c/cpp来执行redis命令&#xff0c;使用的是hiredis客户端来实现的。 先简单贴一下代码 头文件 #include <vector> #include <string> #include <hiredis/hiredis.h> typedef enum en_redisResultType {redis_reply_…

OpenCV代码提取:transpose函数的实现

OpenCV中的transpose函数实现图像转置&#xff0c;公式为&#xff1a;目前fbc_cv库中也实现了transpose函数&#xff0c;支持多通道&#xff0c;uchar和float两种数据类型&#xff0c;经测试&#xff0c;与OpenCV3.1结果完全一致。实现代码transpose.hpp&#xff1a;// fbc_cv …

只给测试集不给训练集,要怎么做自己的物体检测器?

9 月5 日&#xff0c;下周四&#xff0c;大家期待已久的由《动手学深度学习》作者&#xff0c;亚马逊首席科学家亲自带领的「深度学习实训营」就要在北京开营了。今天&#xff0c;李沐已经把这次深度学习实训营白天的教学内容和代码上传到 Gituhub 和 D2L.ai 网站了&#xff0c…

MYSQL忘记登录密码

1、关闭Mysql&#xff1a; 如果 MySQL 正在运行&#xff0c;首先杀之 killall -TERM mysqld 2、另外的方法启动 MySQL &#xff1a;bin/safe_mysqld --skip-grant-tables 3、可以不需要密码就进入 MySQL 了。 然后就是 >use mysql>update user set passwordpassword(&qu…

OpenCV代码提取:flip函数的实现

OpenCV中实现图像翻转的函数flip&#xff0c;公式为&#xff1a;目前fbc_cv库中也实现了flip函数&#xff0c;支持多通道&#xff0c;uchar和float两种数据类型&#xff0c;经测试&#xff0c;与OpenCV3.1结果完全一致。实现代码flip.hpp&#xff1a;// fbc_cv is free softwar…

NLP这两年:15个预训练模型对比分析与剖析

作者 | JayLou来源 | 知乎前言在之前写过的《NLP的游戏规则从此改写&#xff1f;从word2vec, ELMo到BERT》一文中&#xff0c;介绍了从word2vec到ELMo再到BERT的发展路径。而在BERT出现之后的这大半年的时间里&#xff0c;模型预训练的方法又被Google、Facebook、微软、百度、O…

大三下学期第一周总结

本周以是开学第一周了&#xff0c;在生活方面&#xff0c;生活琐事确实变多了起来。每天上课&#xff0c;看着老师熟悉的面庞&#xff0c;如履春风。感觉学习没有那么多的陌生恐惧。学习是一方面&#xff0c;身体锻炼不能落下。一周至少保证三小时及其以上的运动。身体是革命的…

AD rodc扩展报错

AD rodc扩展报错AD RODC抢夺FSMO五大角色后&#xff0c;架构扩展报错&#xff0c;解决办法参考链接&#xff1a;http://support.microsoft.com/kb/949257/en-us

Dropout、梯度消失/爆炸、Adam优化算法,神经网络优化算法看这一篇就够了

作者 | mantch来源 | 知乎1. 训练误差和泛化误差对于机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数&#xff0c;你也许发现了&#xff1a;当模型在训练数据集上更准确时&#xff0c;它在测试数据集上却不⼀定更准确。这是为什么呢&am…

入行AI,你需要一本Python机器学习入门

​目前机器学习红遍全球。男女老少都在学机器学习模型&#xff0c;分类器&#xff0c;神经网络和吴恩达。你也想成为一份子&#xff0c;但你该如何开始&#xff1f;今天小编推荐这本《Python机器学习》教你快速入门。​01什么是机器学习&#xff1f;从出生的那天起&#xff0c;…

通过transpose和flip实现图像旋转90/180/270度

在fbc_cv库中&#xff0c;提供了对图像进行任意角度旋转的函数rotate&#xff0c;其实内部也是调用了仿射变换函数warpAffine。如果图像仅是进行90度倍数的旋转&#xff0c;是没有必要用warpAffine函数的。这里通过transpose和flip函数实现对图像进行顺时针90度、180度、270度的…

DIY强大的虚拟化环境-技术可行性部分

【技术可行性部分】大体的cpu支不支持呀&#xff0c;实际效果使用呀&#xff0c;截图效果截图嵌套虚拟化[esxi&#xff0c;xenserver&#xff0c;Hyper-V]嵌套虚拟化&#xff1a;经过各种查资料&#xff0c;和测试验证[只测过intel的&#xff0c;amd的有类似的文章请去下面的资…

C++11中rvalue references的使用

Rvalue references are a feature of C that was added with the C11 standard. The syntax of an rvalue reference is to add && after a type.为了支持移动操作&#xff0c;C11引入了一种新的引用类型----右值引用(rvalue reference)。所谓右值引用就是必须绑定到右…

AIの幕后人:探秘“硬核英雄”的超级武器

作者 | 云计算的阿晶 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 掐指一算八年之前&#xff0c;那时正是国内互联网卯足劲头起飞的一年&#xff0c;各行各业表现都很突出&#xff0c;尤其是与人们生活密切相关的手机&#xff0c;正大踏步地从功能机向智能手机转…

PAT乙级1003

1003 我要通过&#xff01; &#xff08;20 point(s)&#xff09;“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件&#xff0c;系统就输出“答案正确”&#xff0c;否则输出“答案错误”。 得到“答案…

史上最简洁的UITableView Sections 展示包含NSDicionary 的NSArray

这个最典型的就是电话本&#xff0c;然后根据A&#xff0d;Z分组, 当然很多例子&#xff0c;不过现在发现一个很简洁易懂的&#xff1a; 1. 准备数据&#xff0c;定义一个dictionary来显示所有的内容&#xff0c;这个dictionary对应的value全是数组 也就是&#xff1a; A &…

微软麻将AI Suphx或引入“凤凰房”,与其他AI对打

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】在刚刚结束的上海2019世界人工智能大会上&#xff0c;微软宣布了其在人工智能领域的最新研究突破——由微软亚洲研究院研发的麻将 AI 系统 Suphx 在国际知名的专业麻将平台“天凤”上荣升十段&…

C++11中std::function的使用

类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作&#xff0c;这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。 通过std::function对C中各种可调用实体(普通函数、Lambd…

django模板的导入

模板导入 前提:多个页面有一个相同的页面版块(多个有样式标签的集合体) 如何运用:可以将多个样式标签的集合进行封装对外提供版块的名字(接口),在有该版块的页面中直接导入即可 语法:{% include 版块页面的路径 %} 四inclusion_tag自定义标签 -- 模板导入 前提:多个页面有一个相…

[UML]UML系列——包图Package

系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系&#xff08;include、extend&#xff09; [UML]UML系列——类图Class [UML]UML系列——类图class的关联关系&#xff08;聚合、组合&#xff09; [UML]UML系列——类图class的依赖关系 [UML]UML系…

2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)

A Drawing Borders 很多构造方法&#xff0c;下图可能是最简单的了 代码&#xff1a; #include<bits/stdc.h> using namespace std; const int maxn1e610; struct Point{ int x,y; }; Point a[maxn]; int numa0; Point b[maxn]; int numb0; vector<pair<double,d…

C++11中std::bind的使用

std::bind函数是用来绑定函数调用的某些参数的。std::bind它可以预先把指定可调用实体的某些参数绑定到已有的变量&#xff0c;产生一个新的可调用实体。它绑定的参数的个数不受限制&#xff0c;绑定的具体哪些参数也不受限制&#xff0c;由用户指定。 std::bind&#xff1a;(…

在图数据上做机器学习,应该从哪个点切入?

作者 | David Mack编译 | ronghuaiyang来源 | AI公园&#xff08;ID:AI_Paradise&#xff09;【导读】很多公司和机构都在使用图数据&#xff0c;想在图上做机器学习但不知从哪里开始做&#xff0c;希望这篇文章给大家一点启发。自从我们在伦敦互联数据中心(Connected Data Lon…

C++11中Lambda表达式的使用

Lambda表达式语法&#xff1a;[capture ] ( params ) mutable exception attribute -> return-type { body } 其中capture为定义外部变量是否可见(捕获)&#xff0c;若为空&#xff0c;则表示不捕获所有外部变量&#xff0c;即所有外部变量均不可访问&#xff0c; 表示所有…