placement new的实现与使用问题

shmiloveyou 2013-10-24 04:54:41
More Effective C++中说:
placement new实现是这样的
void * operator new(size_t, void *location)
{
return location;
}


但是在使用时:
class Widget 
{
public:
Widget(int widgetSize);
...
};
Widget * constructWidgetInBuffer(void *buffer,int widgetSize)
{
return new (buffer) Widget(widgetSize);
}

其中new函数的第一参数size为什么可以忽略,而只是用buffer这个参数?这样不会引起函数参数列表不匹配问题么?
请了解“内幕”前辈指点。
...全文
264 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-10-27
  • 打赏
  • 举报
回复
new 操作知道对象的大小。 所以 operator new 的参数size_t,不用计算,new的时候,会直接填写size_t参数。 placement new只需要返回地址,就可以了。 因为new 操作会返回一个地址。
shmiloveyou 2013-10-26
  • 打赏
  • 举报
回复
引用 7 楼 qq120848369 的回复:
不管哪种new,那个size_t参数也都不是你传入的,编译器会帮你搞定。
这个属于编译器管理的范畴?就如3楼所说“new的时候size是隐含传入的,就是sizeof(class T),这点有些象this指针”。 还是很期待有相关文献更深入的学习下,您能帮帮我吗?谢谢!
qq120848369 2013-10-26
  • 打赏
  • 举报
回复
不管哪种new,那个size_t参数也都不是你传入的,编译器会帮你搞定。
shmiloveyou 2013-10-26
  • 打赏
  • 举报
回复
引用 3 楼 zhaokai115 的回复:
new的时候size是隐含传入的,就是sizeof(class T),这点有些象this指针
有没有相关的文献或是相关文章证实这点?根据这种用法可以看出您说的这种方法是可行的。但是我想确认下这种技术的实现细节。谢谢!
漫步者、 2013-10-24
  • 打赏
  • 举报
回复
看下上面的连接
漫步者、 2013-10-24
  • 打赏
  • 举报
回复
http://en.cppreference.com/w/cpp/language/new
zhaokai115 2013-10-24
  • 打赏
  • 举报
回复
new的时候size是隐含传入的,就是sizeof(class T),这点有些象this指针
shmiloveyou 2013-10-24
  • 打赏
  • 举报
回复
引用 1 楼 ganpengjin1 的回复:
调用的是::operator new 吧而非你重载的operator new 吧

漫步者、 2013-10-24
  • 打赏
  • 举报
回复
调用的是::operator new 吧而非你重载的operator new 吧

64,281

社区成员

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

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