C++中实现不可复制的类
C++ 实现 复制 不可
2023-09-14 09:07:02 时间
使用场景
在C++中实现不可复制的类,源码剖析的是boost中的noncopyable类。
C++11实现
要实现对象的不可复制,需要在拷贝构造和赋值操作上做文章。
C++11中比较优雅,直接用= delete做函数删除即可。
default关键字指使用编译器默认生成的函数,不再自己实现构造和析构。
具体代码如下。
class noncopyable
{
public:
noncopyable() = default;
~noncopyable() = default;
noncopyable(const noncopyable&) = delete;
noncopyable& operator=(const noncopyable&) = delete;
};
C++98实现
在C++98中没有这么优雅的关键字,那么只好老老实实把拷贝构造和赋值设置为私有了,禁止外部调用。
class noncopyable
{
public:
noncopyable() {}
~noncopyable() {}
private:
noncopyable(const noncopyable&) {}
noncopyable& operator=(const noncopyable&) {}
};
完整代码
#include <iostream>
namespace cpp11
{
class noncopyable
{
public:
noncopyable() = default;
~noncopyable() = default;
noncopyable(const noncopyable&) = delete;
noncopyable& operator=(const noncopyable&) = delete;
};
}
namespace cpp98
{
class noncopyable
{
public:
noncopyable() {}
~noncopyable() {}
private:
noncopyable(const noncopyable&) {}
noncopyable& operator=(const noncopyable&) {}
};
}
int main()
{
std::cout << "Hello World!\n";
{
cpp11::noncopyable cp1;
cpp11::noncopyable cp2(cp1);
cp2 = cp1;
}
{
cpp98::noncopyable cp1;
cpp98::noncopyable cp2(cp1);
cp2 = cp1;
}
return 1;
}
此时,要想对noncopyable对象做拷贝或赋值都会触发编译异常。
相关文章
- c++实现简单的web服务器搭建
- 猴子吃桃 -- C++ 算法
- C++内存池的简单原理及实现(纯代码解析)
- c++处理数据(变量名、const限定符、转义字符、简单数据类型最大范围)
- C/C++ 关于运算符重载笔记
- C/C++ Qt 信号自定义槽函数
- C/C++/Delphi 调用命令并且显示执行结果
- C++ 协程篇一:co_yield和co_return
- 【C++ 语言】智能指针 引入 ( 内存泄漏 | 智能指针简介 | 简单示例 )
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )
- C++面向对象程序设计(谭浩强)第三章第五节学习笔记
- 线性表的链式存储结构的实现及其应用(C/C++实现)详解编程语言
- C/C++经典网站详解编程语言
- c++消息队列的实现详解编程语言
- C++ vector的使用、创建及初始化
- 什么是C++面向对象编程
- C++指针比较大小(详解版)
- 基于C++中常见编译错误的总结详解
- C++实现基数排序的方法详解
- c语言读取csv文件和c++读取csv文件示例分享
- c++实现十进制转换成16进制示例
- C++实现修改函数代码HOOK的封装方法
- C++实现第K顺序统计量的求解方法