C++ 11 standart kitaplığı std::shared_ptr
'dan std::unique_ptr
'a dönüştürmek için herhangi bir yardımcı program mı, yoksa tam tersi mi? Bu güvenli operasyon mu?C++ 11 unique_ptr ve shared_ptr birbirinin türüne dönüştürebilir mi?
cevap
std::unique_ptr
münhasır sahiplik ifade etmek C++ 11 yoldur, ama onun en çekici özelliklerinden biri kolayca ve verimli birstd:: shared_ptr
dönüşür olmasıdır.Bu,
std::unique_ptr
'un neden fabrika işlevi dönüş türü olarak çok uygun olduğunun önemli bir parçasıdır. Fabrika işlevleri, arayanların döndürdükleri nesne için özel sahiplik semantiklerini kullanmak isteyip istemediklerini veya paylaşılan sahipliğin (yani,std::shared_ptr
) daha uygun olup olmayacağını bilmez. Fabrikalar,std::unique_ptr
numaralı telefonu iade ederek, arayanlara en verimli akıllı göstericiyi sunar, ancak arayanlar daha esnek kardeşi ile değiştirmelerini engellemez.
std::shared_ptr
-std::unique_ptr
izin verilmez. Bir kaynağın ömür boyu yönetimini birstd::shared_ptr
'a çevirdikten sonra, fikrinizi değiştirecek bir şey yoktur. Referans sayısı bir olsa bile, birstd::unique_ptr
ürününü yönetmek için kaynağın sahipliğini geri alamazsınız.Referans: Etkili Modern C++. 42 C++ 11 VE C++ KULLANIMINIZI GELİŞTİRMEK İÇİN ÖZEL ŞEKİL 14. Scott Meyers. Kısacası
, kolay ve verimli bir bir std::unique_ptr
std::shared_ptr
dönüşebilen fakat std::unique_ptr
için std::shared_ptr
dönüştüremezsiniz. Örneğin
:
std::unique_ptr<std::string> unique = std::make_unique<std::string>("test");
std::shared_ptr<std::string> shared = std::move(unique);
ya:
std::shared_ptr<std::string> shared = std::make_unique<std::string>("test");
Verilen unique_ptr u_ptr, Shared_ptr s_ptr oluşturun:
std::shared_ptr<whatever> s_ptr(u_ptr.release());
başka bir yol gidiyor pratik değildir.
İşte "doğru" yol: 'std :: shared_ptr
Ve burada pedantic "doğru" yolu: 'std :: shared_ptr
"Güvenli çalışma" tanımlayın lütfen. Ne tür bir güvenlik arıyorsun? ömür boyu yönetim güvenliği? İplik güvenliği? – jaggedSpire
"STL" standart kütüphane anlamına gelmez. STL'nin "shared_ptr" ile ilgisi yoktur. – curiousguy
@jaggedSpire İş güvenliği, sahiplerin farklı iş parçacıklarında sahip olduğunuz anlamına gelir, yani kullanım sayısı 1 değildir. – curiousguy