yapardım
std::wstringstream temp;
ss.swap(temp);
Düzenleme: christianparpart ve Nemo tarafından bildirilen hata düzeltildi. Teşekkürler.
Not: Yukarıdaki kod, yığın üzerinde yeni bir dizgi akışı nesnesi oluşturur ve her şeyi ss
yeni nesnede bulunanlarla değiştirir.
Avantajlar:
- Garanti eder
ss
yeni bir durumda olacağını .
- Yeni nesne satır içi ve yığın üzerinde oluşturulur, böylece derleyici kodu kolayca optimize edebilir. Sonunda, tüm
ss
dahili verileri başlangıç durumuna sıfırlamak gibi olacaktır .
Daha:
Atama operatörü ile karşılaştırıldığında: STL takas yöntemleri, yeni nesnenin yığın içinde ayrılmış bir arabelleğe sahip olduğu durumlarda atama operatöründen daha hızlı olabilir. Böyle bir durumda, atama operatörü yeni nesne için arabelleği tahsis etmeli, sonra eski nesne için başka bir ara bellek ayırmalı ve ardından veriyi yeni nesnenin arabelleğinden eski nesnenin yeni arabelleğine kopyalamalıdır. Örneğin tamponların işaretlerini değiştiren hızlı bir takas uygulamak çok kolaydır.
C ++ 11. Takas işleminden daha yavaş olan bazı taşıma atama operatörü uygulamaları gördüm, ancak bu düzeltilebilir, ancak muhtemelen STL geliştiricisi çok fazla veriyle taşınan bir nesneyi bırakmak istemeyecektir
std::move()
taşınan nesnenin boşaltılacağını garanti etmez. return std::move(m_container);
m_container'ı temizlemez. Yani yapmak zorunda kalacaksın
auto to_return (std :: move (m_container)); m_container.clear (); dönüşe dön;
Hangisi daha iyi olamaz
auto to_return;
m_container.swap(to_return);
return to_return;
çünkü ikincisi, arabellekleri kopyalamayacağını garanti eder.
Bu yüzden her zaman swap()
uygun olduğu sürece tercih ederim .