Genel olarak Qt kapsayıcılarını derinlemesine kopyalamanın doğru yolu nedir? Kapları tekrar tekrar kopyalamak konusunda endişelenmiyorum, buna değinmek yararlı olacaktır.QMap ve diğer Qt kapsayıcıları nasıl derinlemesine kopyalayın
cevap
Herkesin size anlatacaklarına rağmen - Qt kapsayıcılarını derinlemesine kopyalamıyorsanız - sadece sığ bir alan yerine gerçek bir derin kopya gerçekleştirmeniz gereken durumlar vardır. Bunu yapmak için detach()
:
container1 = container2;
container1.detach();
Harika. Bu cevap –
Bunu ne zaman yapmanız gerektiğine dair bir örnek verebilir misiniz? \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\} – cmannett85
@ cmannett85 Sadece dün tam olarak bunu yapmalıydım. İki iş parçacığım var, biri bir kanaldan (sokete benzer) veri alıyor, verileri işliyor ve birkaç kapsayıcıda saklıyor. Diğer iş parçacığı, yeni verileri düzenli olarak denetleyerek verileri oluşturur. Yeni veriler varsa, bir muteks kilitler ve bazı kapsayıcılardan veri kopyalar - bu, derin kopyalamaya ihtiyacım var. Eğer derin kopyalama yapmamış olsaydım, veri işleme dişi onları değiştirdiğinde konteynırların her biri için kilitleme ayrı bir şekilde yapılırdı, bu da performansı düşürürdü. – kralyk
Kullanmak Yukarıdaki kod benim için iyi çalışıyor - neden düşünmüyorsunuz? – cmannett85
@ cmannett85 GDB aracılığıyla çalıştırdım ve her iki haritanın da "value2" içerdiğini gördüm –
Evet, kodu ilk başta yanlış okudum, bu kod parçasının düzgün çalışması gerekir. Cevabımı siliyorum. –