malloc,new关于构造对象问题?

版主大哥 2012-08-21 04:27:55
请问:
在调用malloc如下:
CTest* pTest = (CTest*)malloc(sizeof(CTest));
然后得到pTest的时候怎么去实现跟new实现的效果一样?也就是去调用构造函数?
难道是pTest->CTest();这样是不对的,那应该如何呢?

求解答。

我不直接用new,是因为我自己管理内存了,所以只能用自己封装的malloc。但是我想实现跟new一样的功能。

我还有想过,在CTest中添加一个Init()函数,但是我觉得这样只能自己调,特别不好的地方就是析构的时候,我想让他自己析构,而不是自己调用UnInit();
...全文
176 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
版主大哥 2012-08-22
  • 打赏
  • 举报
回复 1
[Quote=引用 8 楼 的回复:]

malloc函数只管分配内存,不构造对象。如果要构造的话就用定位new

C/C++ code

new(pTest) CTest(args);
[/Quote]

多谢各位的捧场....

各位对以上问题的回答,对我很有帮助。

呵呵,我也是这么想的,现在是想着怎么去实现。
版主大哥 2012-08-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

malloc函数只管分配内存,不构造对象。如果要构造的话就用定位new

C/C++ code

new(pTest) CTest(args);
[/Quote]

多谢各位的捧场....

各位对以上问题的回答,对我很有帮助。

呵呵,我也是这么想的,现在是想着怎么去实现。
lvjing_CSDN 2012-08-21
  • 打赏
  • 举报
回复
malloc函数只管分配内存,不构造对象。如果要构造的话就用定位new


new(pTest) CTest(args);
wansbest 2012-08-21
  • 打赏
  • 举报
回复
自己管理内存,那为什么不重载new呢!
冻结 2012-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

用 placement new:

#include <new>

pTest = new (pTest) CTest; 等价于 pTest->CTest();
[/Quote]

析构:
pTest->~CTest();
或者用模板tp->~T();
nightkids_008 2012-08-21
  • 打赏
  • 举报
回复
再说一点,你想要让它自己析构的话,不太现实,你在堆上申请的内存。但是你可以用智能指针使他自动析构。
nightkids_008 2012-08-21
  • 打赏
  • 举报
回复
pTest->CTest::CTest(),大概是这样。
wangweizhaoxin 2012-08-21
  • 打赏
  • 举报
回复
如果这样的话只能调用init函数了。自己再写一个destory函数,最好都设置为static函数
www_adintr_com 2012-08-21
  • 打赏
  • 举报
回复
用 placement new:

#include <new>

pTest = new (pTest) CTest; 等价于 pTest->CTest();

64,642

社区成员

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

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