孔乙己:new的五种写法

2024-06-16 22:08
文章标签 写法 五种 new 孔乙己

本文主要是介绍孔乙己:new的五种写法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

孔乙己: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 _Ptr3memset(_Ptr4, 0, sizeof(_INT));allocator_traits<decltype(alloc)>::destroy(alloc, _Ptr5);alloc.deallocate(_Ptr5, 1);return 0;
}

这篇关于孔乙己:new的五种写法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法

《Java报错:org.springframework.beans.factory.BeanCreationException的五种解决方法》本文解析Spring框架中BeanCreationExce... 目录引言一、问题描述1.1 报错示例假设我们有一个简单的Java类,代表一个用户信息的实体类:然后,

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

Python实现开根号的五种方式

《Python实现开根号的五种方式》在日常数据处理、数学计算甚至算法题中,开根号是一个高频操作,但你知道吗?Python中实现开根号的方式远不止一种!本文总结了5种常用方法,感兴趣的小伙伴跟着小编一起... 目录一、为什么需要多种开根号方式?二、5种开根号方式详解方法1:数学库 math.sqrt() ——

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

mybatis的mapper对应的xml写法及配置详解

《mybatis的mapper对应的xml写法及配置详解》这篇文章给大家介绍mybatis的mapper对应的xml写法及配置详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录前置mapper 对应 XML 基础配置mapper 对应 xml 复杂配置Mapper 中的相

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代