C ++ 11 beri const üzerinde değer ve düşündüğünüzden daha sık almalısınız .
Std :: shared_ptr (altta yatan T türü yerine) alıyorsanız, bununla bir şey yapmak istediğiniz için bunu yapıyorsunuz.
Bir yere kopyalamak isterseniz , kopya ile almak daha mantıklıdır ve std :: 'yi const ile alıp daha sonra kopyalamak yerine dahili olarak taşıyın. Bunun nedeni, çağıranın fonksiyonunuzu çağırırken std :: shared_ptr öğesini taşıma seçeneğine izin vermenizdir, böylece kendinize bir dizi arttırma ve azaltma işlemi kaydedersiniz. Ya da değil. Yani, işlevin arayanı işlevi çağırdıktan sonra std :: shared_ptr'e ihtiyaç duyup duymadığına ve hareket edip etmemesine bağlı olarak karar verebilir. Eğer cons & 'ile geçerseniz bu gerçekleştirilemez ve dolayısıyla tercihen değere göre alınır.
Tabii ki, arayan her ikisi de onun paylaşılan_ptr'sini daha uzun süre ihtiyaç duyarsa (böylece std :: hareket edemez) ve işlevde düz bir kopya oluşturmak istemezseniz (zayıf bir işaretçi istediğinizi veya yalnızca bazen istediğinizi) kopyalamak için, bazı koşullara bağlı olarak), bir const hala tercih edilebilir.
Örneğin, yapmalısın
void enqueue(std::shared<T> t) m_internal_queue.enqueue(std::move(t));
bitmiş
void enqueue(std::shared<T> const& t) m_internal_queue.enqueue(t);
Çünkü bu durumda daima dahili olarak bir kopya oluşturursunuz.
shared_ptr
ve eğer istersem değiştirebilirim " diye bağırıyorshared_ptr
. ) bir const referans parametresi diyor gerçek çözümdür "biraz takma gidiyorumshared_ptr
ve bunu değiştirmek için söz veriyorum." (by-value semantik son derece benzerdir hangisi)!