请教个placement new的问题

此去依然 2015-01-08 11:40:02
struct plcmtnew
{
double d1;
double d2;
};
char buffer[1];

try
{
int *pc = new(buffer) int(4);
cout << *pc << endl;
plcmtnew *pn;
pn = new(buffer)plcmtnew{2.2,3.4};
cout << pn->d1 << endl;
cout << pn->d2 << endl;
}
catch (bad_alloc &ba)
{
cout << ba.what() << endl;
exit(EXIT_FAILURE);
}


定位new运算符不关心越界的问题吗?
其他地方没找到相关的解答,当一回伸手党~~~
...全文
160 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2015-01-09
  • 打赏
  • 举报
回复
placement new 需要自己管理内存。
mujiok2003 2015-01-09
  • 打赏
  • 举报
回复
what an new operator expression do: 1. new operator to allocate memory 2. construct object on that memory 如果operator new 失败, 则不会构造对象。 placement new 和 普通new相比, operator new 不会失败, 所以一定会构造对象。 在一个小空间中构造大对象, 行为时未定义的。
pengzhixi 2015-01-09
  • 打赏
  • 举报
回复
引用 6 楼 yshuise 的回复:
引用 4 楼 pengzhixi 的回复:
[quote=引用 3 楼 yshuise 的回复:] 不能用数组,而是用malloc,new申请的内存。
是否是动态分配的都没关系。
《exceptional c++》讲的[/quote] 恐怕是不建议,而不是说不能这么干
yshuise 2015-01-09
  • 打赏
  • 举报
回复
引用 4 楼 pengzhixi 的回复:
引用 3 楼 yshuise 的回复:
不能用数组,而是用malloc,new申请的内存。
是否是动态分配的都没关系。
《exceptional c++》讲的
encoderlee 版主 2015-01-09
  • 打赏
  • 举报
回复
越界问题是你该关心的,不是他的责任
pengzhixi 2015-01-09
  • 打赏
  • 举报
回复
引用 3 楼 yshuise 的回复:
不能用数组,而是用malloc,new申请的内存。
是否是动态分配的都没关系。
yshuise 2015-01-09
  • 打赏
  • 举报
回复
不能用数组,而是用malloc,new申请的内存。
此去依然 2015-01-09
  • 打赏
  • 举报
回复
谢谢各位的解答~~
ri_aje 2015-01-09
  • 打赏
  • 举报
回复
c++ 标准都不关心,就说了一句未定义行为,然后让程序员自求多福。
pengzhixi 2015-01-08
  • 打赏
  • 举报
回复
不关心,placement new 只负责构造对象

64,683

社区成员

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

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