相关疑难解决方法(0)

初始化对象时是否可以放弃放置新的返回值

这个问题源于这个帖子中的评论部分,并且在那里也得到了答案.但是,我认为仅仅留在评论部分是非常重要的.所以我为此做了这个Q&A.

Placement new可用于初始化分配的存储中的对象,例如,

using vec_t = std::vector<int>;
auto p = (vec_t*)operator new(sizeof(vec_t));
new(p) vec_t{1, 2, 3}; // initialize a vec_t at p
Run Code Online (Sandbox Code Playgroud)

根据cppref,

安置新的

如果提供了placement_params,则将它们作为附加参数传递给分配函数.在标准分配函数之后,这种分配函数被称为"placement new" void* operator new(std::size_t, void*),它只是简单地返回其第二个参数.这用于在分配的存储中构造对象[...]

这意味着new(p) vec_t{1, 2, 3}简单地返回p,并且p = new(p) vec_t{1, 2, 3}看起来多余.忽略返回值真的可以吗?

c++ initialization placement-new compiler-optimization

7
推荐指数
1
解决办法
347
查看次数