C ++就地放置新

时间:2016-04-09 07:59:07

标签: c++ placement-new

基本上,如果我有一个变量T value和一个将T func(const T &)转换为另一个T的函数new (&value) T(func(value)),我可以value吗?我不确定重写同一个地方是否会导致问题。可以在func(value)完成之前覆盖旧的sudo吗?

UPDATE:我这样做是为了尝试将尾递归转换为循环(编译器无法通过非平凡的析构函数对其进行优化)。方法比放置新的方法更受欢迎!

1 个答案:

答案 0 :(得分:1)

不,你不能(安全地)这样做。必须在已分配但未初始化的内存或POD对象上使用Placement new。

您不能绕过构造函数,复制,移动对象上的ctors /赋值和析构函数(POD除外)。如果你想这样做,你的设计就会出现问题,你需要去绘图板。