«move-semantics» etiketlenmiş sorular

4
Neden kopyalayıp taşıyoruz?
Birinin bir nesneyi kopyalamaya ve ardından onu bir sınıfın veri üyesine taşımaya karar verdiği bir yerde kodu gördüm. Bu, hareket etmenin tüm amacının kopyalamaktan kaçınmak olduğunu düşündüğüm için kafamı karıştırdı. İşte örnek: struct S { S(std::string str) : data(std::move(str)) {} }; İşte sorularım: Neden bir rvalue referansı almıyoruz str? Özellikle …

8
initializer_list ve semantiği taşı
Elemanları a'nın dışına taşımama izin var std::initializer_list<T>mı? #include <initializer_list> #include <utility> template<typename T> void foo(std::initializer_list<T> list) { for (auto it = list.begin(); it != list.end(); ++it) { bar(std::move(*it)); // kosher? } } Yana std::intializer_list<T>özel derleyici dikkat gerektiren ve C ++ standardı kütüphanesinde normal kaplarda gibi değer anlambilim yok, ben daha …

5
Yalnızca hareket tipi bir vektörü listeleyebilir miyim?
Aşağıdaki kodu GCC 4.7 anlık görüntümden geçirirsem, s'leri unique_ptrvektöre kopyalamaya çalışır . #include <vector> #include <memory> int main() { using move_only = std::unique_ptr<int>; std::vector<move_only> v { move_only(), move_only(), move_only() }; } Açıkçası bu işe yaramaz çünkü std::unique_ptrkopyalanamaz: hata: silinmiş işlevin kullanımı 'std :: unique_ptr <_Tp, _Dp> :: unique_ptr (const std …

3
Bir vektör büyüdüğünde hareket semantiğini nasıl zorlayabilirim?
std::vectorBelli bir sınıftaki nesnelerim var A. Sınıf önemsiz değildir ve kopya oluşturuculara ve tanımlanmış taşıma yapıcılarına sahiptir. std::vector<A> myvec; Vektörü Anesnelerle doldurursam (örneğin kullanarak myvec.push_back(a)), vektördeki A( const A&)öğelerin yeni kopyalarını somutlaştırmak için copy yapıcısını kullanarak vektörün boyutu büyür . ABunun yerine sınıfın hareket oluşturucusunun kullanılmasını bir şekilde zorlayabilir miyim …

4
Neden varsayılan taşıma ataması / taşıma yapıcısı yok?
Ben basit bir programcıyım. Sınıf üyelerim değişkenleri çoğunlukla POD türleri ve STL kapsayıcılarından oluşur. Bu nedenle, bunlar varsayılan olarak uygulandığı için nadiren atama işleçleri yazmak veya oluşturucuları kopyalamak zorunda kalıyorum. Buna ek olarak, std::movehareket ettirilemeyen nesnelerde kullanırsam, atama operatörünü kullanır, yani std::movetamamen güvenlidir. Basit bir programcı olduğum için, yazdığım her …

2
Zaten oluşturulmuş nesneler için std :: move ile emplace_back () arasında C ++ 11 push_back () verimliliği
C ++ 11'de emplace_back(), push_back()yerinde yapılanmaya izin verdiği için genellikle (verimlilik açısından) tercih edilir , ancak bu push_back(std::move()), önceden oluşturulmuş bir nesne ile kullanıldığında hala geçerli midir? Örneğin emplace_back(), aşağıdaki gibi durumlarda hala tercih ediliyor mu? std::string mystring("hello world"); std::vector<std::string> myvector; myvector.emplace_back(mystring); myvector.push_back(std::move(mystring)); // (of course assuming we don't care …

4
Kaynaklardan std :: map anahtarlarının çalınmasına izin var mı?
C ++ 'da, artık ihtiyaç duymadığım bir haritadan kaynakları çalmak sorun değil mi? Daha doğrusu, ben bir olduğunu varsayalım std::mapile std::stringanahtar ve ben kaynaklarını çalarak bunun bir vektör dışarı inşa etmek istiyorum mapkullanarak s tuşları std::move. Anahtarlara böyle bir yazma erişiminin iç veri yapısını (anahtarların sıralaması) bozduğunu mapancak daha sonra …
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.