C++中的new操作符:new operator、operator new、placement new

news/2025/10/17 10:33:23/文章来源:https://www.cnblogs.com/heitu152/p/19147208

new操作符(new operator)

当你写这种代码时:
string *ps = new string("Memory Management");
你使用的new是new操作符。

new操作符的动作包含两部分:

  1. 在堆上为创建的对象申请内存
  2. 调用对象的构造函数进行初始化

operator new

当你写这种代码时:
void *rawMemory = operator new(sizeof(string));
你使用的new是operator new。

operator new的职责仅仅是分配内存,它不会调用对象的构造函数进行初始化

operator new的函数声明一般如下:

void * operator new(size_t size);

  • 返回值类型void*,未初始化的内存
  • 參数size_t确定分配多少内存
  • 你能添加额外的參数重载函数operator new,可是第一个參数类型必须是size_t。
    -(有关operator new很多其它的信息參见Effective C++ 条款8至条款10。)

placement new

当你写这种代码时:
Widget *p = new (buffer) Widget(widgetSize);
你使用的new是placement new。

placement new的职责是在一块未初始化的内存上,调用对象的构造函数

以下的样例是placement new怎样使用:

点击查看代码
class Widget {public:Widget(int widgetSize);...
};Widget * constructWidgetInBuffer(void *buffer,int widgetSize)
{return new (buffer) Widget(widgetSize);
}

new (buffer) Widget(widgetSize)的职责是在buffer指向的内存上,调用Widget的构造函数

小结

  • 你想在堆上建立一个对象,应该用new操作符。它既分配内存又为对象调用构造函数。
  • 假设你只想分配内存,就应该调用operator new函数;它不会调用构造函数。
  • 假设你想定制自己的在堆对象被建立时的内存分配过程,你应该写你自己的operator new函数。
  • 假设你想在一块已经获得指针的内存里建立一个对象。应该用placement new。

參考:https://www.cnblogs.com/slgkaifa/p/6887887.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaBean知识总结及范例

一、什么是 JavaBean? JavaBean 本质上是一个符合特定编码约定的 Java 类。它不是一个框架或技术,而是一种标准/规范。遵循这个规范的类,可以被特定的工具(如 IDE、Spring 框架等)更便捷地发现、使用和操作。二、…

C++20 协程的简单示例

C++20 协程的简单示例以下使用编译器版本为:gcc version 11.4.0 c++20 懒得介绍协程是什么,先直接贴一个最简单的例子:1 #include <iostream>2 #include <coroutine>3 #include <stdexcept>4 #in…

HMAC-SHA256 请求签名与验签实践(Python 可直接复用)

HMAC-SHA256 请求签名与验签实践(Python 可直接复用)目标:沉淀一套“能复制即用”的签名/验签规范与代码,解决接口防篡改与防伪造。 关键规则:待签名串:METHOD + "\n" + Content-MD5 + "\n"…

2025 年家装管道生产厂家最新推荐排行榜:覆盖云南昆明贵州贵阳四川成都重庆,精选优质 PPR/PVC 管道品牌,解决选购难题

在家装过程中,管道作为水电系统的核心部件,其质量直接决定居住安全与生活舒适度。当前家装管道市场混乱,部分厂商偷工减料,导致管道抗压差、易老化、密封性不足,漏水渗水问题频发,给业主带来巨大财产损失与生活困…

同一设备多账号登录,如何避免消息推送“串门”?

对各应用厂商而言,推送通知消息是App提高用户活跃度和转化率的高性价比营销工具。然而,当一个用户设备登录多个账号时,开发者可能会遇到同一条消息在同一设备的不同账号上重复展示的问题,这不仅降低了消息推送的精…

强合规行业DevOps选型:告别工具拼凑,找到真正适配的国产化DevOps方案

强合规行业DevOps平台选型需“建体系”,传统开源工具组合易陷数据割裂、合规难达标困境。本文对比三款DevOps产品,其中国产DevOps平台契合信创DevOps需求,内置合规卡点与追溯能力,适配国产化环境,助力企业平衡合规…

实用指南:精读 C++20 设计模式:行为型设计模式——观察者模式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

大疆无人机RTMP推流至LiveNVR实现web页面实时播放与录像回放,并可以转GB28181协议级联推送给上级监控视频管理平台

@目录1、无人机推流转国标2、获取RTMP推流地址2.1、RTMP推流地址格式2.2、推流地址示例2、设备RTMP推流3、配置拉转RTMP3.1、直播流地址格式3.2、直播流地地址示例3.3、通道配置直播流地址4、配置级联到GB28181国标平台…

Character Animator 2025下载安装教程:2D角色动画软件零基础入门,附最新下载安装教程及激活方法

还在找Character Animator 2025怎么下载安装?这份保姆级教程帮你一步到位!不管是做虚拟主播、短视频动画,还是教育课件制作,掌握CH 2025的安装方法是第一步。本文包含详细下载渠道、安装步骤、快捷键及常见问题,看…

2025年彩钢瓦/镀锌板/折弯件/C型钢/Z型钢/压型瓦/楼承板/次檩条厂家推荐排行榜,专业钢结构安装与定制加工实力解析

2025年彩钢瓦/镀锌板/折弯件/C型钢/Z型钢/压型瓦/楼承板/次檩条厂家推荐排行榜,专业钢结构安装与定制加工实力解析随着我国建筑工业化的快速发展,钢结构建筑因其施工周期短、抗震性能好、可回收利用等优势,在工业厂…

2025 年最新金相厂家最新推荐排行榜:涵盖金相磨抛机 / 切割机 / 显微镜 / 抛光机 / 预磨机设备,助力企业精准选择优质品牌

当前材料检测行业持续发展,金相检测作为材料分析核心环节,对石油机械、铁路器材、航空航天等领域的产品质量与安全起着关键作用。随着市场需求升级,金相品牌数量激增,但品牌间技术实力、产品质量和服务水平差距明显…

武汉图核科技

武汉图核科技新的名字 以前的名字是英语单词音译过来的,没有什么具体含义,也不容易看出是做什么的。中国人还是取个中文名好一些,于是想换个名字,要言简意赅,简单好记。不擅长取名,找AI来帮忙:一眼相中了图核科…

maven的概述以及在mac安装部署

maven的概述以及在mac安装部署pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

完整教程:display ospf peer 概念及题目

完整教程:display ospf peer 概念及题目pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…

Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧

Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");列表_切片赋值_slice_assignment_嫁接 回忆上次…

2025中国开发者必看:主流代码托管平台本土化能力深度测评

2025中国开发者必看:主流代码托管平台本土化能力深度测评 在数字化转型加速推进的当下,代码托管平台已成为软件开发团队不可或缺的基础设施。随着国内开发者群体的快速扩张,对代码托管服务的本土化需求也日益凸显。…

开源数据采集工具 logstash(收集日志)/telegraf(收集指标)

Telegraf 是一个用 Go 编写的代理程序,是收集和报告指标和数据的代理。可收集系统和服务的统计数据,并写入到 InfluxDB 数据库。Telegraf 具有内存占用小的特点,通过插件系统开发人员可轻松添加支持其他服务的扩展。…

2025年粉末冶金制品厂家推荐排行榜,粉末冶金零件,金属注射成形,结构件,齿轮,轴承公司最新精选

2025年粉末冶金制品厂家推荐排行榜:粉末冶金零件、金属注射成形、结构件、齿轮、轴承公司最新精选行业背景与发展趋势粉末冶金技术作为现代制造业的核心工艺之一,在汽车、家电、机械装备等领域发挥着越来越重要的作用…

多模态大语言模型LISA - 详解

多模态大语言模型LISA - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

2025 年升降平台车厂家最新推荐口碑排行榜:覆盖多类型产品,聚焦实力厂家,为企业选购提供权威参考剪叉式/手动液压/电动液压升降平台车厂家推荐

在工业生产、仓储物流等领域,升降平台车是不可或缺的关键设备,其质量与性能直接关系到企业运营效率与生产安全。当前市场上,升降平台车品牌繁杂,部分厂家技术落后、工艺不规范、售后不完善,导致企业选购时面临诸多…