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 除外)。如果你想这样做,你的设计有问题,你需要去绘图板。
基本上,如果我有一个变量 T value
和一个将 T
转换为另一个的函数 T func(const T &)
,我可以做 new (&value) T(func(value))
吗?我不确定重写同一个地方是否会导致问题。旧的 value
可以在 func(value)
完成之前被覆盖吗?
更新: 我这样做是为了尝试将尾递归转换为循环(由于非平凡的析构函数,编译器无法对其进行优化)。比 placement new 更好的方法非常受欢迎!
不,你不能(安全地)那样做。 placement new 必须用于已分配但未初始化的内存或 POD 对象。
您不能只绕过对象的构造函数、复制、移动 ctors/assignments 和析构函数(PODs 除外)。如果你想这样做,你的设计有问题,你需要去绘图板。