孔乙己:new的五种写法

2023-10-29

孔乙己:new的五种写法

这个是目标类:_INT
拥有一个字面常量构造函数,和一个平凡析构函数
可以从int构造,也可以隐式转换为int
也可以和int比较大小

class _INT
{
private:
	int value;
public:
	constexpr explicit _INT(int _Val0 = 0) noexcept:value(_Val0) {}
	~_INT() {}
	operator int()
	{
		return value;
	}

	bool operator ==(int _Right)
	{
		return value == _Right;
	}
	bool operator <(int _Right)
	{
		return value < _Right;
	}

};

第一种写法:

  • auto _Ptr1 = new _INT(1);
    对应释放方式:delete _Ptr1;

第二种写法:

  • auto _Ptr2 = new (malloc(sizeof(_INT))) _INT(2);
    对应释放方式:free(_Ptr2);

第三种写法:

  • auto _Ptr3 = new (operator new(sizeof(_INT))) _INT(3);
    对应释放方式:
    _Ptr3->~_INT();
    operator delete(_Ptr3);
    或( delete _Ptr3; )

第四种写法:
char memory[0x1000];

  • auto _Ptr4 = new (memory) _INT(4);
    对应释放方式:
    _Ptr4->~_INT();
    memset(_Ptr4, 0, sizeof(_INT));

第五种写法:
allocator<_INT> alloc;

  • auto _Ptr5 = alloc.allocate(1);
  • allocator_traits<decltype(alloc)>::construct(alloc,_Ptr5, 5);
    对应释放方式:
    allocator_traits<decltype(alloc)>::destroy(alloc, _Ptr5);
    alloc.deallocate(_Ptr5, 1);

在这里插入图片描述


#include <iostream>
#include <memory>
#include <list>
#include <vector>
#include <memory>


using namespace std;


class _INT
{
private:
	int value;
public:
	constexpr explicit _INT(int _Val0 = 0) noexcept:value(_Val0) {}
	~_INT() {}
	operator int()
	{
		return value;
	}

	bool operator ==(int _Right)
	{
		return value == _Right;
	}
	bool operator <(int _Right)
	{
		return value < _Right;
	}

};



int main()
{
	char memory[0x1000];
	allocator<_INT> alloc;


	auto _Ptr1 = new _INT(1);
	auto _Ptr2 = new (malloc(sizeof(_INT))) _INT(2);
	auto _Ptr3 = new (operator new(sizeof(_INT))) _INT(3);
	auto _Ptr4 = new (memory) _INT(4);

	auto _Ptr5 = alloc.allocate(1);
	allocator_traits<decltype(alloc)>::construct(alloc,_Ptr5, 5);
	
	cout << *_Ptr1 << endl;
	cout << *_Ptr2 << endl;
	cout << *_Ptr3 << endl;
	cout << *_Ptr4 << endl;
	cout << *_Ptr5 << endl;

	delete _Ptr1;

	free(_Ptr2);

	_Ptr3->~_INT();
	operator delete(_Ptr3); // delete _Ptr3
	
	memset(_Ptr4, 0, sizeof(_INT));

	allocator_traits<decltype(alloc)>::destroy(alloc, _Ptr5);
	alloc.deallocate(_Ptr5, 1);

	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

孔乙己:new的五种写法 的相关文章

  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • Unity3D - 将 UI 对象移动到屏幕中心,同时保持其父子关系

    我有一个 UI 图像 它的父级是 RectTransform 容器 该容器的父级是 UI 面板 而 UI 面板的父级是 Canvas 我希望能够将此 UI 图像移动到屏幕中心 即画布 同时保留父级层次结构 我的目标是将 UI 图像从中心动画
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 如何在 C# 中获取 CMD/控制台编码

    我需要指定正确的代码页来使用 zip 库打包文件 正如我所见 我需要指定控制台编码 在我的例子中为 866 C Users User gt mode Status for device CON Lines 300 Columns 130 K
  • 如何为有时异步的操作创建和实现接口

    假设我有数百个类 它们使用 计算 方法实现公共接口 一些类将执行异步 例如读取文件 而实现相同接口的其他类将执行同步代码 例如将两个数字相加 为了维护和性能 对此进行编码的好方法是什么 到目前为止我读到的帖子总是建议将异步 等待方法冒泡给调

随机推荐

  • OpenGL ES 3.0 开发(一)

    什么是 OpenGLES OpenGLES 全称 OpenGL for Embedded Systems 是三维图形应用程序接口 OpenGL 的子集 本质上是一个跨编程语言 跨平台的编程接口规范 主要应用于嵌入式设备 如手机 平板等 由科
  • SpringBoot websocket + java swing 实现大文件上传与下载

    使用场景 无法直接登录服务器上传文件 使用web端上传超大文件出现超时 实现原理 上传 server端与client端建立websocket连接 client将待传文件进行分块 然后将文件的相关信息 文件名 md5值 分块大小 总块数 当前
  • 角谱衍射计算

    角谱衍射 角谱衍射计算 D F F T D FFT D FFT 即采用两次傅里叶变换 原始公式和 S
  • IP协议相关技术

    前言 其实我们在上网的时候并不是直接使用IP地址 同样IP地址还不方便记忆 这样我们就需要IP相关的技术来帮助我们通信 DNS 一开始人们使用TCP IP世界中的主机识别码来转换成具体的IP地址 这样人们就可以直接使用主机名称 但是随着网络
  • Chatglm2-6b模型相关问题

    Chatglm2 6b模型相关问题 1 Chatglm2 6b模型p tuning后推理答非所问 2 ChatGLM2 6b ptuning 3 ChatGLM2 6b部署 1 Chatglm2 6b模型p tuning后推理答非所问 据C
  • python词云 小说《庆余年》

    一 概述 使用jieba分词和wordcloud生产 小说的词云库 源码地址 https github com jw star pythonDemo tree master E5 BA 86 E4 BD 99 E5 B9 B4wordclo
  • HTML第一次作业

    什么是web前端 web前端就是由多种技术制作的 用来给用户展示的网页 也叫网站的前台部分 包括的技术有html css javascript jQueery bt等 什么是HTML hyper text maekuo language 骨
  • DVWA靶场存储型XSS漏洞实验

    文章目录 文章目录 前言 一 XSS基础 1 什么是XSS 2 XSS漏洞原理 3 XSS漏洞成因 4 XSS漏洞危害 5 存储型XSS漏洞原理 6 存储型XSS与反射型XSS的区别 二 DVWA靶场实战 1 存储型XSS漏洞利用 LOW
  • 求逆矩阵的常用三种方法

    1 待定系数法 矩阵A 1 2 1 3 假设所求的逆矩阵为 a b c d 则 这里写图片描述 从而可以得出方程组 a 2c 1 b 2d 0 a 3c 0 b 3d 1 解得 a 3 b 2 c 1 d 1 2 伴随矩阵求逆矩阵 伴随矩阵
  • node之Buffer(缓冲区)

    Node js Buffer 缓冲区 JavaScript 语言自身只有字符串数据类型 没有二进制数据类型 但在处理像TCP流或文件流时 必须使用到二进制数据 因此在 Node js中 定义了一个 Buffer 类 该类用来创建一个专门存放
  • 矢量绘图UI设计Sketch

    Sketch是一款Mac操作系统上常用的矢量图形编辑软件 旨在帮助用户设计和创建高质量的UI和UX界面 软件安装 Sketch 中文 以下是Sketch软件的一些主要特点 矢量工具和对象 Sketch提供了多种画线 填充 阴影 文本和形状等
  • UE4 部分命令知识点梳理

    UE4 部分命令知识点梳理 1 r SSGI Enable 0 1 屏幕空间 全局光照关闭 开启 2 DFO 距离场AO 指数指的是AO强度 遮挡最大距离 指的是距离场AO影响的最大距离 3 r forcelod 1 0 1 等 设置场景模
  • CSS中clear:both的作用

    clear both意思就是清除浮动 例如我们设置了三个div如下
  • es6中let var const 的特点及区别

    首先 var是定义一个变量常用的方法 与其相似的还有let和const 以下介绍他们三个的特点及不同 一 var var的用法很多 没有什么局限 可以对变量进行声明 例如 注意 var let const 是js的关键词 需要写在scrip
  • CSDN笔记

    拉普拉斯变换的收敛域 ROC 与逆变换 ILT 1 是否可积即是否收敛 如果可收敛 面积 拉氏值即为收敛域 1 收敛的条件 e jwt 积分为振荡函数 2 常系数线性微分方程对应线性时不变系统 其分析步骤有三 3 拉氏逆变换 ILT 的方法
  • Linux僵尸进程怎么处理,Linux 僵尸进程如何处理

    Linux 允许进程查询内核以获得其父进程的 PID 或者其任何子进程的执行状态 例如 进程可以创建一个子进程来执行特定的任务 然后调用诸如 wait 这样的一些库函数检查子进程是否终止 如果子进程已经终止 那么 它的终止代号将告诉父进程这
  • js求时间差

    js求时间差 var date1 new Date 开始时间 alert aa var date2 new Date 结束时间 var date3 date2 getTime date1 getTime 时间差的毫秒数 计算出相差天数 va
  • 基于SpringBoot的购票系统的设计与实现

    博主介绍 在职Java研发工程师 专注于程序设计 源码分享 技术交流 专注于Java技术领域和毕业设计 温馨提示 文末有 CSDN 平台官方提供的老师 Wechat QQ 名片 项目名称 基于SpringBoot的购票系统的设计与实现 演示
  • 十五分钟带你学会 Electron

    文章目录 什么是 Electron 为什么要选择 Electron 安装 Electron 桌面CSDN实战 Electron 基础配置 Electron 进程 主进程 渲染进程 主进程与渲染进程的区别 主进程与渲染进程的通信 Electr
  • 孔乙己:new的五种写法

    孔乙己 new的五种写法 这个是目标类 INT 拥有一个字面常量构造函数 和一个平凡析构函数 可以从int构造 也可以隐式转换为int 也可以和int比较大小 class INT private int value public const