C++ new关键字的一些特殊用法

news/2024/7/3 12:24:47 标签: c++, new, 定位new, placement new, nothrow

new_0">placement new

i.普通的new关键字申请内存空间时,是从系统的堆中分配的空间,申请所得到的空间的位置是根据当时的内存的实际使用情况来决定的。
ii.placement new就是特殊情况下,需要在指定的特定内存去创建对象,就是定位放置new操作
iii.用法: Test* test = new(ptr) Test; 上述 ptr 就是指定内存首地址位置
iv.定位new操作,既可以是栈上,也可以是堆上
v.使用定位new定位生成对象时,会自动调用类Test的构造函数,但是由于对象的空间不会自动释放(因为实际上只是借用了别人的空间),所以必须显式调用类的析构函数,test->~Test();
vi.不到万不得已不要使用placement new,通常用于需要对内存布局进行精细控制的场合,例如嵌入式编程或自定义内存管理策略

new_nothrow_8">new nothrow

内存耗尽时使用new会抛出异常ball_alloc,可以使用: Test* test = new(nothrow) Test; 的方式阻止抛出异常,但是记得对test判空。

new_11">new的内置类型初始化

对于内置类型,值初始化的内置类型对象有着良好定义的值,而默认初始化的对象的值是未定义的。所以推荐对于内置类型,使用以下方式进行动态内存的创建:int* i = new int(); int后面加括号,自动初始化为默认值0


http://www.niftyadmin.cn/n/5479867.html

相关文章

构建智能生态:详解同城O2O外卖跑腿APP的开发技术

同城O2O外卖跑腿APP作为这一新型服务的代表,其开发技术成为了当下技术界的热点之一。小编将深入讲解同城O2O外卖跑腿APP的开发技术,以期为开发者提供一些有益的参考和指导。 需求分析与功能设计 在开发同城O2O外卖跑腿APP之前,首先需要进行充…

SpringCloud的使用以及五大核心组件

一、SpringCloud介绍 微服务架构的提出者:马丁福勒 https://martinfowler.com/articles/microservices.html // 微服务架构的提出者:马丁福勒(中午网) http://blog.cuicc.com/blog/2015/07/22/microservices/ 马丁.福勒对微服务…

Windows内核是什么,如何保障内核安全

Windows操作系统发展到如今已有三十余年,是目前在全球范围内广泛使用的操作系统。Windows内核是操作系统的核心部分,内核包括了HAL(硬件抽象层),设备驱动,微内核,各种管理设备,管理层以及系统服务界面&…

如何在Java中实现多维数组?

目录 1. 多维数组的基础 2. 多维数组的初始化 3. 多维数组的访问 4. 更高维度的数组 5. 多维数组的应用场景 总结 Java中实现多维数组的方法多样,涵盖了从基础的二维数组到更复杂的多维数组动态初始化等。 1. 多维数组的基础 在Java中,多维数组实…

Springboot-redis整合

Springboot-redis命令行封装 前言 Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。Redis也是现…

大语言模型如何工作?

此为观看视频How Large Language Model works的笔记。 GPT(Generative Pre-trained Transformer)是一个大语言模型(LLM),可以生成类似人类的文本。本文阐述: 什么是LLMLLM如何工作LLM的应用场景 什么是…

【Rust】环境搭建

Rust 支持很多的集成开发环境(IDE)或开发专用的文本编辑器。 官方网站公布支持的工具如下(工具 - Rust 程序设计语言) 本课程将使用 Visual Studio Code 作为我们的开发环境(Eclipse 有专用于 Rust 开发的版本&#…

K8S容器空间不足问题分析和解决

如上图,今天测试环境的K8S平台出现了一个问题,其中的一个容器报错:Free disk space below threshold. Available: 3223552 bytes (threshold: 10485760B),意思服务器硬盘空间不够了。这个问题怎么产生的,又怎么解决的呢…