社区
C++ 语言
帖子详情
可否用 malloc 为class分配内存?(不用 operator new)
cmexp
2008-02-19 09:55:25
不用 class 的 operator new.
例如:
myclass *a = (myclass*) malloc(sizeof(myclass));// or GlobalAlloc();
这样无法调用构造函数,放在 operator new 内就可以。
...全文
777
24
打赏
收藏
可否用 malloc 为class分配内存?(不用 operator new)
不用 class 的 operator new. 例如: myclass *a = (myclass*) malloc(sizeof(myclass));// or GlobalAlloc(); 这样无法调用构造函数,放在 operator new 内就可以。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
一般情况下没有必要
珍惜生命远离CPP
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)
Cpp面经200问.pdf
malloc
申请的存储空间能否用delete释放 不能。使用delete释放由
malloc
分配的内存会导致未定义行为,因为
malloc
分配的内存没有通过构造函数构造。 #### 64.
malloc
与free实现原理
malloc
和free是C标准库中用于动态...
c++
new
操作符(
new
operator
)、
operator
new
、placement
new
、
operator
new
[] 及相对应的delete 操作符、
operator
delete
一.
new
new
operator
就是
new
操作符,不能被重载,假如A是一个类...事实上,
分配内存
这一操作就是由
operator
new
(size_t)来完成的,如果类A重载了
operator
new
,那么将调用A::
operator
new
(size_t ),否则调用全局:...
C/C++内存分配
new
与
malloc
详解
1. C++内存分配调用过程 上图中,pt
malloc
,tc
malloc
与je
malloc
等是
malloc
底层... C/C++内存分配原语有
malloc
,
new
,::
operator
new
()和allocate(),其中
可否
重载关系如下: 分配 释放 类别
可否
重载 m
C/C++动态内存分配
malloc
、
new
、vector(简单讲述)
今天来主要讲C++中动态内存分配其中会穿插一些C的内容以及两者的比较如果对C语言中的动态内存分配还不够理解的同学在讲解C++的动态内存分配之前。
C++内存分配之
new
与delete
内存分配 C++中有多种内存分配、释放方式: 分配 释放 类属
可否
重载
malloc
() free() C函数 不可
new
delete C++表达式 不可 ::
operator
new
() ::
operator
delete() C++函数 可 allocator::allocate...
C++ 语言
65,198
社区成员
250,522
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章