【C++11保姆级教程】delete和default关键字

news2025/1/20 5:57:22

文章目录

  • 前言
  • 一、delete关键字
    • 1.1 什么是delete关键字?
    • 1.2delete关键字的语法和用法
    • 1.3delete关键字的作用和优势
  • 二、default关键字
    • 2.1 什么是default关键字?
    • 2.2default关键字的语法和用法
    • 2.3 default关键字的作用和优势
  • 总结


前言

欢迎来到本教程,今天我们将学习C++11中的两个关键字:delete和default。这两个关键字为我们提供了更清晰和更灵活的方式来控制类的默认行为。无论您是初学者还是有经验的开发人员,本教程都将以通俗易懂的语言解释这两个关键字的概念和用法。让我们开始吧!


一、delete关键字

1.1 什么是delete关键字?

在C++11中,delete关键字可以用于删除类的特殊成员函数或禁止使用特定的函数。通过使用delete关键字,我们可以明确地告诉编译器某个函数是禁止的,从而防止使用者无意中调用它们。

注意:是类中的成员函数或禁止使用特定的函数,不要放错了地方。

1.2delete关键字的语法和用法

在函数声明或定义中,我们可以使用delete关键字来删除或禁用函数。下面是一些使用delete关键字的示例:

class MyClass {
public:
    // 删除默认构造函数
    MyClass() = delete;

    // 删除拷贝构造函数
    MyClass(const MyClass&) = delete;

    // 删除赋值运算符
    MyClass& operator=(const MyClass&) = delete;

    // 删除特定参数的构造函数
    MyClass(int value) {
        // 构造函数实现...
    }

    // 删除特定参数的成员函数
    void foo() {
        // 函数实现...
    }
};

int main() {
    MyClass obj1;           // 编译错误:无法使用删除的默认构造函数
    MyClass obj2(obj1);     // 编译错误:无法使用删除的拷贝构造函数
    obj1 = obj2;            // 编译错误:无法使用删除的赋值运算符
    MyClass obj3(10);       // 正常调用带参数的构造函数
    obj3.foo();             // 正常调用成员函数
    return 0;
}

我们还可以使用他删除全局函数:
在这里插入图片描述

1.3delete关键字的作用和优势

防止误用:使用delete关键字可以明确禁止调用特定函数,从而防止用户错误地调用这些函数。比如,我们可以删除默认构造函数,防止用户通过不经意间创建对象。
提供更好的错误提示:通过使用delete关键字,编译器可以提供更明确的错误信息,告诉我们哪些函数是被删除的,为什么无法使用它们。

二、default关键字

2.1 什么是default关键字?

在C++11中,default关键字用于显式声明编译器生成的默认实现。当我们需要使用默认实现时,可以使用default关键字告诉编译器去生成对应的函数代码。

2.2default关键字的语法和用法

默认情况下,编译器会自动生成一些特殊成员函数,如默认构造函数、拷贝构造函数和赋值运算符。但是,我们也可以显式地声明使用编译器提供的默认实现。下面是一些使用default关键字的示例:

class MyClass {
public:
    // 默认构造函数(使用默认实现)
    MyClass() = default;

    // 拷贝构造函数(使用默认实现)
    MyClass(const MyClass&) = default;

    // 拷贝赋值运算符(使用默认实现)
    MyClass& operator=(const MyClass&) = default;

    // 移动构造函数(自定义实现)
    MyClass(MyClass&& other) {
        // 移动构造函数的自定义实现...
    }
};

int main() {
    MyClass obj1;        // 调用默认构造函数
    MyClass obj2(obj1);  // 调用拷贝构造函数
    obj1 = obj2;         // 调用拷贝赋值运算符
    return 0;
}

2.3 default关键字的作用和优势

显式声明默认实现:通过使用default关键字,我们可以明确地告诉编译器要使用默认实现,使代码更加清晰和易读。
自动生成特殊成员函数:当我们显式声明一个特殊成员函数时,如拷贝构造函数,但没有提供实现时,编译器会自动生成该函数的默认实现。


总结

在本教程中,我们学习了C++11中的两个关键字:delete和default。delete关键字用于删除或禁止使用特定的函数,让我们能够更精确地控制类的行为,并提供更好的错误检测和报告。default关键字用于显式声明编译器生成的默认实现,使代码更清晰易读,并自动生成特殊成员函数的默认实现。通过合理地使用这两个关键字,我们可以编写更可靠、更容易理解和维护的代码。

希望本教程能够帮助您理解delete和default关键字的概念和用法。如果您对C++的学习有更深入的需求,请继续学习其他相关教程和文档。祝您在编写C++程序时能够灵活运用这些知识,取得更好的效果!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谁是 “凶手” !

找“凶手” 解题方法!🕵️‍ 近日,日本米花町发生了一起凶杀案,警察通过排查确定杀人凶手必为4个嫌疑犯中的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说&…

Mybatis多表查询与动态SQL的使用

目录 1. Mybatis多表查询 1.1 添加文章表实体类 1.2 文章Interface 1.3 文章.xml 1.4 lombok的toString()有关对象打印的说明 1.5 场景: 一个用户查询多篇文章 2. 复杂情况: 动态SQL的使用 2.1 为什么要使用动态SQL? 2.2 <if>标签 2.3 <trim>标签 2.4 <where&g…

如何在 iOS 上安装并使用 ONLYOFFICE 文档

借助 iOS 版文档应用&#xff0c;您可在移动端设备上访问存储于 ONLYOFFICE 账户中的文件&#xff0c;查看和编辑现有文本文档、电子表格和演示文稿&#xff0c;创建新文档并对其进行整理&#xff0c;以及连接第三方云存储服务。您可与其他门户网站用户协作编辑文档&#xff0c…

【第三阶段】kotlin语言的可空性

1.kotlin语言默认是不可空类型&#xff0c;不能随意给null fun main() {var name:String"kotlin"namenull }执行结果 报错&#xff1a; Null can not be a value of a non-null type String2.声明可空类型 &#xff1f; fun main() {var name:String ?namenull…

语聚AI公测发布,大语言模型时代下新的生产力工具

语聚AI 公测发布 距离语聚AI内测上线已经过去近1个月。 这期间&#xff0c;我们共邀请了近百位资深用户与行业专家加入语聚AI产品体验。通过大家的热情参与积极反馈&#xff0c;我们不断优化并完善了语聚AI的功能与使用体验。 经过研发团队不懈的努力&#xff0c;今天语聚AI终…

[谦实思纪 01]整理自2023雷军年度演讲——《成长》(上篇)武大回忆(梦想与成长)

文章目录 [谦实思纪]整理自2023雷军年度演讲 ——《成长》&#xff08;上篇&#xff09;武大回忆&#xff08;梦想与成长&#xff09;0. 写在前面1. 梦开始的地方1.1 要有梦想&#xff0c;要用目标量化梦想 2. 在两年内修完所有的学分。2.1 别老自己琢磨&#xff0c;找个懂的人…

【C++】STL案例1-评委打分

0.前言 1.系统自动生成的评委评分代码&#xff1a; #include <iostream> using namespace std; #include <deque> #include <vector> #include <algorithm> #include <string>//选手类 class Player { public:Player(string name, float score)…

Python:LVGL与触摸屏的调试记录

在移远模块EC-600M上驱动电容触摸屏&#xff0c;触摸屏控制IC为FT6206。 一、接口 TP屏的管脚如下&#xff0c;有6PIN。使用I2C接口通讯 所以我们用模块的I2C1通道&#xff0c;模块的IO口电压也是1.8v 二、I2C从地址 FT6x06芯片相对于主机来说是一个I2C设备 因此需要一个I2C…

3.1 命名空集using声明

博主介绍&#xff1a;爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;夏驰和徐策带你从零开始学C 前言&#xff1a; 第2章介绍的内置类型是由C语言直接定义的。这些类型&#xff0c;比如数字和字符&#xff0c;体现了大 多数计算机硬件本身具…

Python弹球小游戏

给在校的小妹妹做个游戏玩&#xff1a;. 弹珠游戏主要是靠坐标xy&#xff0c;接板长度&#xff0c;球的半径等决定&#xff1a; # -*- coding: utf-8 -*- # Author : Codeooo # Time : 2022/04/29import sys import time import random import pygame as pgprint("&q…

TCP三次握手,四次挥手,SYN泛洪攻击

目录 一.三次握手 二.SYN泛洪攻击概念 三.四次挥手 一.三次握手 当客户端调用connect连接服务器时,底层会发生“三次握手”&#xff0c;握手成功&#xff0c;建立连接,connect解阻塞&#xff0c;继续执行。 TCP报头&#xff1a; 三次握手过程&#xff1a; 客户端发出SYN请求…

P16 电路定理——巧妙-灵性-智慧

1、诺顿定理的证明 诺顿定理的证明&#xff0c; 回忆戴维南定理的证明是&#xff0c;在a,b两端加上一个电流源&#xff0c;再根据叠加定理&#xff0c;就解电压Uab。 对偶原理&#xff1a; 在a,b两端加上一个电压源u&#xff0c;再根据叠加定理求A中的独立源作用是给到a&#x…

下一代计算:嵌入AI的云/雾/边缘/量子计算

计算系统在过去几十年中推动了计算机科学的发展&#xff0c;现在已成为企业世界的核心&#xff0c;提供基于云计算、雾计算、边缘计算、无服务器计算和量子计算的服务。现代计算系统解决了现实世界中许多需要低延迟和低响应时间的问题。这有助于全球各地的青年才俊创办初创企业…

【学会动态规划】环形子数组的最大和(20)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

用友时空KSOA SQL注入漏洞[2023-HW]

用友时空KSOA SQL注入漏洞 一、 产品简介二、 漏洞分析三、 影响范围四、 复现环境五、 漏洞复现小龙POC检测脚本:批量SQL注入源码 六、 修复建议**临时缓解方案**升级修复方案 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供…

vue3+vite+pinia

目录 一、项目准备 1.1、Vite搭建项目 1.2、vue_cli创建项目 二、组合式API(基于setup) 2.1、ref 2.2、reactive 2.3、toRefs 2.4、watch和watchEffect 2.5、computed 2.6、生命周期钩子函数 2.7、setup(子组件)的第一个参数-props 2.8、setup(子组件)的第二个参数…

springboot父服务下创建子服务,依赖管理

在微服务中&#xff0c;我们会有一个父服务&#xff0c;下面建多个子服务。 1、创建子服务 2、子服务依赖父服务 引入父工程 3、父工程管理子服务 4、查看依赖正常 结束&#xff01;&#xff01; hy:25 知识是对灵魂的澄清。 -- 柏拉图《理想国》

29 深度玻尔兹曼机

文章目录 29 深度玻尔兹曼机29.1 背景介绍29.2 DBM的叠加方式 29 深度玻尔兹曼机 29.1 背景介绍 过去在解决BM问题的时候&#xff0c;提出过多种模型&#xff1a;RBM、SBN、DBN 其中RBM是一种有限制条件的&#xff0c;简化的BM&#xff0c;限制了隐藏层和观测层内部都没有连…

GEE学习05

修改输出绝对路径 和python里面一样&#xff0c;修改输出底图的路劲&#xff1a; Map3.save(r"C:\test\topo.html")1、浏览一下GEE帮助文档 https://developers.google.cn/earth-engine/guides 这个链接是国内外都可以正常访问的。 GEE指导主要是针对的JS&#xf…

Verdi_Annotate Macro功能

Verdi_Annotate Macro功能 介绍 When debugging designs that contain define macros, it is often helpfull to view a macro definition in the context of a macro reference. 在调试包含定义宏的设计时&#xff0c;在宏引用上下文中查看宏定义通常会很有帮助。 方法 Sh…