SORU
21 Mayıs 2009, PERŞEMBE


Üye veri işaretçileri veya başvuruları tercih etmeliyim?

Bu soruyu göstermek için basitleştirilmiş bir örnektir:

class A {};

class B
{
    B(A& a) : a(a) {}
    A& a;
};

class C
{
    C() : b(a) {} 
    A a;
    B b; 
};

Bu yüzden B, C tüysüz kodunu araştırdım ve referans üye hakkında whinged kısmının güncellenmesi sorumludur: lint#1725. Bu varsayılan kopyalama bakımı hakkında konuşuyor ve hangi yeterince adil atamalar, ama varsayılan kopyalama ve Atama da göstericiler ile kötü, orada küçük bir avantajı var.

Ben her zaman çıplak göstericiler beri bu işaretçiyi silmek kimin sorumlu olduğu konusunda uncertaintly tanıştırabilirim nerede başvuruları kullanmayı deneyin. Değeri nesneleri gömmek için tercih ederim ama eğer bir işaretçi istiyorum, işaretçiyi sahibi olan sınıfın üye veri auto_ptr kullanmak ve etrafında nesneyi referans olarak geçmektedir.

Genellikle sadece işaretçi null olabilecek üye veri bir işaretçi kullanın ya da değiştirebilir. Veri üyeleri için başvurular üzerinde işaretçiler tercih için başka bir sebebiniz var mı?

Gerçek bir nesne başvurusu içeren bir başvuru başlatıldığını bir kez değiştirilmelidir beri atanabilir olması gerektiğini söylemek doğru olur mu?

CEVAP
21 Mayıs 2009, PERŞEMBE


Başparmak benim kural :

  • Nesne başka nesneleri hayatını bağımlı olmak istiyorum ne zaman başvuru üye kullanınbu açık bir şekilde söylemek değilsin izin ver bir nesne, canlı olmadan geçerli bir örneği, bir başka sınıf - çünkü hiç bir görev ve yükümlülük almak için başvurular başlatma) kurucu.Başka bir sınıfın üyesi olmaktan örneği ya da bir şey hakkında değil varsayarak olmadan sınıf tasarımı için iyi bir yol.Sadece hayatlarını doğrudan diğer örneklerine bağlı olduğunu varsayalım. Sınıf örneği (yerel bir örnek, sınıfın bir üyesi olarak, bir yönetici, bir bellek havuzu tarafından oluşturulan, vb.) kullanın daha sonra değiştirmek için izin verir
  • Diğer durumlarda işaretçi kullanın: Üyenin daha sonra değiştirilmesi için, bir işaretçi veya sadece sivri örneğini okuyun, sabit bir işaretçi kullanın.Eğer bu tür copyable olması gerekiyorsa, başvurular zaten kullanamazsınız.Bazen de, özel bir işlev çağrısı sonra üye başlatmak gerekiyor (() init örneğin) ve daha sonra sadece ama bir işaretçi kullanmak için hiçbir seçenek yok.AMA tüm üye onayları hızlı bir şekilde yanlış gösterici devlet! tespit çalışması
  • Nesne ömrü harici bir nesnenin ömür boyu bağımlı olmak istediğiniz durumlarda, ve ayrıca bu tür copyable, kurucu üyeleri işaretçi ama referans değişkeni kullanınBu şekilde bu nesnenin ömür boyu argüman ömür boyu bağlı inşaat belirtiyorsunuz AMA uygulama işaretçiler hala copyable olmak için kullanın. Bu üyeler sadece kopya ile değiştirilir, ve türü varsayılan bir oluşturucuya sahip olmadığı sürece, bu tür iki gol karşılayacak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • case LianLi

    case LianLi

    28 Mayıs 2010
  • Sams Page :D

    Sams Page :D

    15 Mart 2009
  • The White House

    The White Ho

    21 Ocak 2006