社区
C++ 语言
帖子详情
replacement new 的问题
benh
2008-05-13 02:16:46
//将对象放在指定位置
const int comLoc = 0x00400000;
void * addLoc = reinterpret_cast<void *>(comLoc);
Tst * t = new (addLoc) Tst();
这里,怎么保证addLoc处已经申请了足够的内存呢? addLoc只是个地址,可是怎么知道sizeof(Tst)呢?
...全文
480
7
打赏
收藏
replacement new 的问题
//将对象放在指定位置 const int comLoc = 0x00400000; void * addLoc = reinterpret_cast(comLoc); Tst * t = new (addLoc) Tst(); 这里,怎么保证addLoc处已经申请了足够的内存呢? addLoc只是个地址,可是怎么知道sizeof(Tst)呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taodm
2008-05-13
打赏
举报
回复
不要“网上看”,去找本好点的C++教材看。
比如,C++ Primer或者C++ Programming Language,书后索引表里找。
网上的东西,对错都搞不清楚。
benh
2008-05-13
打赏
举报
回复
这个是我从网上看到的一段代码,可能是作者留个自己看得。那么我下面的理解对不对?
placement new一般有两种用法,一个是在不重新申请内存的情况下初始化对象,另一个是将对象放在指定的位置。
第一种应用,有这样的代码
const size_t BUFSIZE=10;
const size_t n=sizeof(string)*BUFSIZE;
string * buf=static_cast<string *>(::operator new(n));
for(int i=0;i<BUFSIZE;i++)
...{
new (&buf[i]) string("fghdf"); //placement new 的使用
}
for(int j=0;j<BUFSIZE;j++)
cout << buf[j] << endl;
i=BUFSIZE-1;
while(i>=0)
...{
buf[i--].~basic_string();
}
::operator delete(buf);
第二种应用,对应最上面的代码,这么理解对吗
冷月清晖
2008-05-13
打赏
举报
回复
可以用C++ routines:
size_t _msize_dbg( void *userData, int blockType );
size_t _msize( void *memblock );
注意DEBUG版本应该用_msize_dbg.
原贴:http://topic.csdn.net/t/20020915/16/1025403.html
healer_kx
2008-05-13
打赏
举报
回复
[Quote=引用 2 楼 taodm 的回复:]
“怎么保证addLoc处已经申请了足够的内存呢”
兄弟啊,那是正你作为程序员的职责。
[/Quote]
强烈的UP这句话,!!!
Treazy
2008-05-13
打赏
举报
回复
如果你本身堆上空间使用完了,你说怎么保证?
taodm
2008-05-13
打赏
举报
回复
“怎么保证addLoc处已经申请了足够的内存呢”
兄弟啊,那是正你作为程序员的职责。
xkyx_cn
2008-05-13
打赏
举报
回复
难道comLoc不是你申请的?
c++
replace
ment
new
操作
#include #include #include //注意必须包括此头文件 class CTest { public: CTest(int i,int ii) { m = i; n = ii; p =
new
char[100]; strcpy(p,"good test"); } ~CTest() { m = 11; n = 13; delete[
【C++内存管理机制】学习笔记(3):
replace
ment
new
Hello!ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!唯有努力💪本文仅记录自己感兴趣的内容文章仅作为个人学习笔记记录,记录从0到1的一个过程希望对您有一点点帮助,如有错误欢迎小伙伴指正。
new
operator,operator
new
and
replace
ment
new
new
operator:指在C++里通常用到的关键字 operator
new
:它是一个操作符,并且可被重载 关系: operator
new
can be called explicitly as a regular function, but in C++,
new
is an operator with a very specific behavior: An expression w
05--C++内存管理和底层函数用法速览 |operator
new
|operator delete|
replace
ment
new
| (复习笔记)
(operator
new
为
new
底层)
C++——
new
,delete,与place
ment
new
。
介绍
new
和delete原理、用法、常见错误、介绍定位
new
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章