about:placement new

sunyong 2005-02-25 01:12:56
> 其中的new(__p) _Tp(__val)我很不理解?

這種 new 稱為 placement new。在 C++ Primer 3/e 8.4.5節可以查到,Thinking in C++ 上應該也有描述。
意思是,在一塊 allocated memory(由例中的 __p 指向)取足夠空間建構一個新的 object,並以 __val 為初值。
而不像一般的 new 在操作當時才從 heap 中分配空間。

使用它之前,必須先 #include <new>。

#include <new>
class Foo;
...
char* buf = new char[500]; // 分配一塊空間,500 bytes
Foo* pb1 = new(buf) Foo(abc); // 從 buf 所指空間開始,建構一個 Foo object(將耗用 sizeof(Foo)),以 abc 為初值。
buf += sizeof(Foo); // 移動 pointer
Foo* pb2 = new(buf) Foo(def); // 從 buf 所指空間開始,建構一個 Foo object(將耗用 sizeof(Foo)),以 def 為初值。

-- 侯捷


----- Original Message -----
From: sunyong
To: jjhou
Sent: Thursday, February 24, 2005 3:20 PM
Subject: about:new(__p) _Tp(__val)


侯先生,你好:
我在stl_alloc.h文件中看到这么一行代码
void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
其中的new(__p) _Tp(__val)我很不理解?我也自己做了个例子,结果也
不能编译。能否帮忙解释一下?

孙永

Best regards,
...全文
146 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2005-02-25
  • 打赏
  • 举报
回复
见STL源码剖析二三章, 关键在于显示的调用你的构造函数, 但是又不malloc。
寻开心 2005-02-25
  • 打赏
  • 举报
回复
不完全一样, placement 不仅仅是把对象的定位在制定的内存,而且在该位置完成了对象的初始化工作呢
Wolf0403 2005-02-25
  • 打赏
  • 举报
回复
通常类似

void * operator new ( size_t _sz, void * p )
{
return p;
}
寻开心 2005-02-25
  • 打赏
  • 举报
回复
在msdn上面看 How new Works 这个index
注意placement只有对用户自己定义的类型才有用,对于float,char,int之类的没有用途
寻开心 2005-02-25
  • 打赏
  • 举报
回复
msdn上面的原始例子啊

#include <malloc.h>
#include <memory.h>

class Blanks
{
public:
Blanks(){}
void *operator new( size_t stAllocateBlock, char chInit );
};
void *Blanks::operator new( size_t stAllocateBlock, char chInit )
{
void *pvTemp = malloc( stAllocateBlock );
if( pvTemp != 0 )
memset( pvTemp, chInit, stAllocateBlock );
return pvTemp;
}
int main()
{
Blanks *a5 = new( 0xa5 ) Blanks;

return a5 != 0;
}
redleaves 2005-02-25
  • 打赏
  • 举报
回复
这种new实际上就是帮你调用构造函数.它不为你分配内存空间,你要自己先为你要new的对象分配足够的空间,并且持有它,一直到你new的对象销毁.

调用方法.
new(内存块首地址) 类型
内容概要:本文围绕“单相逆变器闭环逆变电路PWM模型仿真研究”展开,基于Simulink平台构建单相逆变器的闭环控制系统仿真模型,重点研究PWM调制技术在逆变电路中的应用与实现。文中详细阐述了系统架构设计、电压电流双闭环控制策略的实现原理、控制器参数设计及仿真建模全过程,并通过仿真结果验证了控制方案在动态响应、稳态精度与系统稳定性方面的有效性。同时,文档还涵盖多种电力电子系统典型应用场景,如多类型短路故障仿真(中性点不接地、经小电阻接地、经消弧线圈接地等)、软开关技术、微电网能量管理、MPPT控制等,体现出较强的技术综合性和工程实践价值。; 适合人群:电气工程、自动化、电力电子与新能源等相关专业的高校本科生、研究生、科研人员,以及从事电力系统仿真、逆变器设计与新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的单相逆变器闭环控制系统建模与PWM仿真方法;②深入理解双闭环控制、SPWM/SVPWM调制、系统稳定性分析等核心技术原理;③为课程设计、毕业设计、科研项目或实际工程开发提供可复用的仿真模型与技术支持; 阅读建议:建议结合文中仿真模型动手实践,重点掌握PI控制器参数整定、PWM信号生成机制与仿真结果分析方法,同时可延伸学习文档中涉及的软开关、故障仿真、微电网控制等关联技术,以拓展系统级设计能力。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧