=default和=delete

2024-06-16 23:48
文章标签 default delete

本文主要是介绍=default和=delete,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

=default:

1,只能对编译器可以合成的默认构造函数或拷贝控制成员使用=default。

2,是显式让编译器来生成合成的函数不能自己定义只能声明。

     (1) 可以允许在类定义内外同时声明,不过需要default需要在类外声明时指定。

     (2) 若在类内声明时指定default,则是内联的; 若在外部声明时指定,则是非内联的。

     因此c++ primer 5th P237“=default 既可以和声明一起出现在类的内部,也可以作为定义出现在类的外部”是错误的,在外部也只能是声明,否则会编译报错。

1, 只在类定义时声明为default. 此时是内联的.
class base {
public:base() = default;
private:int a;
};2, 在类定义时声明非default,在类定义外声明为default. 此时不是内联.
class base {
public:base(); //首次声明
private:int a;
};
// ok. 再一次声明
base::base() = default;3,在类定义时声明为default,类定义外不能再声明或定义
class base {
public:base() = default;
private:int a;
};
//下面三种情况都会编译报错:error: definition of explicitly-defaulted 'base::base()'
base::base() = default;
base::base() {};
base::base();

=delete

是这样一种函数:我们虽然声明的它们,但不能以任何方式使用它们。

1,可以对任何函数指定=delete。

2,必须出现在函数第一次声明的时候。

3,通知编译器(以及我们代码的读者),我们不能定义这些函数。

class base {
public:base(const base&) = delete;
private:int a;
};// 下面两种情况都会报重复定义. error: redefinition of 'base::base(const base&)'
(1)
base::base(const base &rhs)
{a = rhs.a;
}
(2)
base::base(const base &rhs) = delete;
// note: 'base::base(const base&)' previously defined here
//     base(const base&) = delete;// 普通函数一样,不能对声明为delete的函数进行定义
void aa() = delete;
// 报重复定义. error: redefinition of 'void aa()'
// note: 'void aa()' previously defined here
// void aa() = delete;
void aa()
{cout << "aa" << endl;
}
int main()
{cout << "hello" << endl;return 0;
}

这篇关于=default和=delete的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067894

相关文章

Qt: 详细理解delete与deleteLater (避免访问悬空指针导致程序异常终止)

前言 珍爱生命,远离悬空指针。 正文 delete 立即删除:调用 delete 后,对象会立即被销毁,其内存会立即被释放。调用顺序:对象的析构函数会被立即调用,销毁该对象及其子对象。无事件处理:如果在对象销毁过程中还涉及到信号和槽、事件处理等,直接 delete 可能会导致问题,尤其是在对象正在处理事件时。适用场景:适用于在确定对象已经不再被使用的情况下,并且不涉及异步处理或事件循环中的

MongoDB学习—(1)安装时出现The default storage engine 'wiredTiger' is not available问题解决

MongoDB是NoSql类型的一种基于分布式文件存储的数据库,其存储方式与关系型数据库不同。其详细解释可见于[百科]。安装文件可从官网下载,官网:http://mongodb.org 我将下载的解压文件放到D盘的mongodb文件夹下,

[LeetCode] 583. Delete Operation for Two Strings

题:https://leetcode.com/problems/delete-operation-for-two-strings/description/ 题目 Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 the same, where in

[LeetCode] 740. Delete and Earn

题:https://leetcode.com/problems/delete-and-earn/ 题目大意 对于数组nums ,选取一个数 num,那么nums数组中 num - 1 与 num + 1 都会被删除,重复多次直到 nums 数组为空。求选取 num 的最大和。 解题思路 方法一 treeMap 将nums 中所有元素进行reduce操作,得到 TreeMap,其中 key

Add, Search, Delete Node in BST.

Add Node, Search Node, Delete Node, 的基本操作,被问了两次了。写出来。 http://quiz.geeksforgeeks.org/binary-search-tree-set-1-search-and-insertion/   // add the node;public TreeNode addNode(TreeNode root, int val)

Delete the Middle Node of a Linked List

You are given the head of a linked list. Delete the middle node, and return the head of the modified linked list. The middle node of a linked list of size n is the ⌊n / 2⌋th node from the start using

C++11中的default函数

对于C++ 11标准中支持的default函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量。 C++的类有四类特殊成员函数,它们分别是: 默认构造函数析构函数拷贝构造函数拷贝赋值运算符 这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象,如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译

C++相关概念和易错语法(31)(特殊类的设计、new和delete底层调用分析)

特殊类的设计 在实践过程中,我们难免会接触到一些需要实现特定功能的类。像之前提过的unique_ptr就是直接delete拷贝构造和赋值函数。下面会分享一些常见的特殊类的实现 1、防拷贝和防赋值 通过封死拷贝构造和赋值函数来保护对象里面内容不被复制。如果对象里面的内容是指针,对析构次数有严格要求的话(如unique_ptr)就通常采用这种处理方法。 注意拷贝构造和移动拷贝为一体,赋值重

malloc/free 和 new/delete的区别

malloc/free 和 new/delete 是 C++ 中两种不同的动态内存管理方法,它们有一些关键的区别: 1. 内存分配和释放机制 malloc 和 free: 函数: malloc 是一个 C 标准库函数,用于从堆中分配指定大小的原始内存块。它返回一个 void* 指针,指向分配的内存块的起始位置。free 用于释放由 malloc 分配的内存,防止内存泄漏。初始化: mallo

利用default.xml回退代码

如果想把代码回退到之前的某个版本,那么需要一个之前版本的default.xml,将这个xml替换掉.repo/manifests/default.xml,然后repo sync  -c -d,这样就可以退回到原来的版本了