2016-04-09 25 views
1

基本上,如果我有一個變量T value和功能T func(const T &)T轉換爲另一個,我可以做new (&value) T(func(value))?我不確定重寫同一個地方是否會導致問題。在func(value)完成之前,舊的value會被覆蓋嗎?C++就地安置新

更新:我這樣做是爲了嘗試將尾遞歸轉換爲循環(由於非平凡的析構函數,編譯器無法對其進行優化)。比放置新方法更好的方法比歡迎!

+3

爲什麼不簡單'value = func(value);'? – Jarod42

+0

@ Jarod42'T'可能不是可複製(或移動)賦值。 –

+0

所以你試着繞過'T'接口:/ ...還要注意,你忘記調用新的位置的'value'析構函數。 – Jarod42

回答

1

不,你不能那麼做(安全地)。 Placement new必須用於分配但未初始化的內存或POD對象上。

您不能繞過構造函數,複製,移動對象上的ctors/assignments和destructor(POD除外)。如果你想這樣做,你的設計出現問題,你需要去繪圖板。