Bir kapsayıcıyı kapsayıcıdan uzak tutmaksızın bir kapsayıcının (iterator aracılığıyla) benzersiz_ptr öğelerine nasıl erişir? Konteynırdaki bir elemanın iteratörü aldığında, konteynırla birlikte eleman sahipliği devam eder mi? Yineleyicinin unique_ptr'ye erişim kazanması ne zaman yapılır? Bu, unique_ptr'nin gizli bir hareketini gerçekleştiriyor mu?Benzersiz kapsayıcının bir kapsayıcısı üzerinde yineleme
Öğe kapsayıcı öğelerin sahibi olduğunda ve diğer kod yalnızca kapsayıcıdaki öğeleri işlemek istese bile, öğeyi bir kapta (değerle değil) depolamanız gerektiğinde shared_ptr çok kullanıyorum kabın içindeki unique_ptr öğelerine fiilen erişememekten korkuyorum.
Herhangi bir anlayış?
Tamam, sanırım bu benim için bazı şeyleri açıklığa kavuşturuyor. Yeni for_each işlevini, parametresi öğeye göre değil, öğeye göre geçirilen bir lambda ile kullanma alışkanlığımdaydım, ancak denemekten kaçınmak istiyorsam, unique_ptr öğeleri için başvuru yapmak zorunda kalacağım sanırım kopyala/taşı. Not; Yineleyiciyi bir kez işaretlediğimde ve bu sonuca bir atıfta bulunursam, bunun kopyalamaya teşebbüs etmemesini isterim. Demek istediğim: 'için (Container :: iterator it = container.begin(); it! = Container.end(); ++ ++) { unique_ptr & element = &*it; // Kopyalama denemeye mi gerek yok? } ' Teşekkürler Howard, btw. –
Evet, bunun iyi çalışması gerektiğini düşünüyorum. Kodunuzda ekstra bir & amp; var. Ama derleyici size nerede olduğunu söyleyecektir. –
Bunu bir dere olarak belirtebilirsiniz: blah & element = ** it; hala bir kopyası olmadan düşünüyorum. (Muhtemelen daha kullanışlı.) –