2016-04-09 33 views
1

Temel olarak, T value değişkenine ve T bir T dönüştüren bir işlev new (&value) T(func(value)) yapabilir miyim? Aynı yeri yeniden yazmanın sorun yaratabileceğinden emin değilim. Eski value, func(value) bitirmeden önce üzerine yazabilir mi?C++ yerinde yerleştirme yeni

GÜNCELLEME: Bunu bir kuyruk yinelemeyi döngü içine döndürmeyi denemek için yapıyorum (derleyiciler, önemsiz olmayan yıkıcı nedeniyle onu optimize edemezler). Yeni yerleşimden daha iyi olan yöntemler, karşılamadan daha fazlasıdır!

+3

Neden basitçe 'value = func (value);'? – Jarod42

+0

@ Jarod42 'T', kopyalanabilir (veya taşınamaz) atanabilir olmayabilir. –

+0

Yani, T 'arayüzünü atlamaya çalışın:/... Ayrıca, yeni değerle birlikte' value 'destructor'ını çağırmayı da unutmayın. – Jarod42

cevap

1

Hayır bunu yapamazsınız (güvenle). Yerleşim yeni ayrılan, ancak başlatılmamış bir bellekte veya POD nesnesinde kullanılmalıdır.

Yalnızca kurucuları atlayamaz, kopyalayamaz, ctors/ödevleri ve yıkıcıları nesnelere taşıyamazsınız (POD'lar hariç). Bunu yapmak isterseniz, tasarımınızda bir sorun var ve çizim tahtasına gitmeniz gerekiyor.