可否用 malloc 为class分配内存?(不用 operator new)

cmexp 2008-02-19 09:55:25
不用 class 的 operator new.

例如:
myclass *a = (myclass*) malloc(sizeof(myclass));// or GlobalAlloc();

这样无法调用构造函数,放在 operator new 内就可以。
...全文
828 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
hong8292 2008-02-21
  • 打赏
  • 举报
回复
还有,我想问一句,你这里的默认是你从代码里看到的吧,不是标准规定这样做的吧。那这个默认仅仅是你所看到的版本的默认,对不?
hong8292 2008-02-21
  • 打赏
  • 举报
回复
我的意思是你可以自己重新写一个完整的STL后者利用你手上现有的进行改良,呵呵~~
不是针对你哦~~HOHO
yuanchuang 2008-02-21
  • 打赏
  • 举报
回复
问楼主一句:你这么做的目的是啥?
z_kris 2008-02-21
  • 打赏
  • 举报
回复
TO hong8292:
那我们对std名字空间还有STL的理解就有偏差了
我从不认为自定义的只要符合标准的也属于库的一部分
而且我的意思很明显就是默认的情况下new操作符的那个operator new版本
何必这般较真 死咬住字眼不放呢?
既然我说了operator new可以重载
而且完全可以按照自己的想法实现
那么malloc实现的operator new肯定就是特定版本的啊
snailman 2008-02-21
  • 打赏
  • 举报
回复
void *a = malloc(sizeof(myclass));
myclass*p = new(a)myclass;
/////////////////////////////////////////
这个已经是标准答案了
hong8292 2008-02-21
  • 打赏
  • 举报
回复
STL 也有很多版本。甚至你自己写一个符合标准的也可以叫STL,你说的std::operator new 是用malloc来实现明显就是针对具体版本来说的。
baihacker 2008-02-20
  • 打赏
  • 举报
回复
一般情况下没有必要
  • 打赏
  • 举报
回复
void *a = malloc(sizeof(myclass));
myclass*p = new(a)myclass;
bobob 2008-02-20
  • 打赏
  • 举报
回复
为什么要这么做?大不了重载new?
michney 2008-02-20
  • 打赏
  • 举报
回复
你知道new 和 malloc的区别吗
查一查就知道问题答案了
stoneyrh 2008-02-20
  • 打赏
  • 举报
回复
5楼正解
z_kris 2008-02-20
  • 打赏
  • 举报
回复
没说完整……
应该是说std::operator new的第一步是通过malloc完成的,只能在堆上分配内存
而自定义的operator new就是可以根据自己的需要在指定地方分配内存,比如静态数据块
placement new就是一个典型例子
cmexp 2008-02-20
  • 打赏
  • 举报
回复
可能不用 operator new 不行。
就是想这样,

class B
{
public:
void *operator new( size_t size, void* addr );
};

void* B::operator new( size_t size, void* addr )
{
return addr;
}

B* b=new(myaddr) B;

还有这样在debug模式不行:(
shouhu13 2008-02-20
  • 打赏
  • 举报
回复
显式调用构造函数..
z_kris 2008-02-20
  • 打赏
  • 举报
回复
malloc只有分配内存
new分为两步 第一步operator new 分配内存
第二步调用构造函数 在分配的内存处构造对象
而new的第一步其实就是通过malloc完成的
AngelDevil 2008-02-20
  • 打赏
  • 举报
回复
mark
z_kris 2008-02-20
  • 打赏
  • 举报
回复
貌似14楼的没看到我后面的补充
不过std里面的operator new确实是分配heap上的内存
自定义的另当别论 想怎么弄就怎么弄
tang_cheng 2008-02-20
  • 打赏
  • 举报
回复
楼住如果是想自己管理内存可以重载new运算符
baihacker 2008-02-20
  • 打赏
  • 举报
回复

pointee_->~T();
::free( pointee_ );
hong8292 2008-02-20
  • 打赏
  • 举报
回复
谁说operator new一定用malloc来实现。
标准规定malloc在heap段,new 在free store段。尽管可以这样实现,但是仅仅是实现方法之一,而且,我想反问,为什么不用operator new 来实现malloc呢?
加载更多回复(4)
内容概要:本文围绕“单相逆变器闭环逆变电路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创作助手写篇文章吧