C++ 就地放置 new

C++ in-place placement new

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

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

不,你不能(安全地)那样做。 placement new 必须用于已分配但未初始化的内存或 POD 对象。

您不能只绕过对象的构造函数、复制、移动 ctors/assignments 和析构函数(PODs 除外)。如果你想这样做,你的设计有问题,你需要去绘图板。