SORU
29 Mayıs 2009, Cuma


Neden üye başlatma listesi kullanmayı tercih etmeliyim?

Benim kurucular ile üye başlatma listeleri kullanarak düşkünüm... ama uzun zamandır bunun arkasındaki sebep unuttum...

Senin kurucular üye başlatma listeleri kullanıyor musunuz? Eğer öyleyse, neden? Değil, neden değil?

CEVAP
29 Mayıs 2009, Cuma


POD sınıf üyeleri için, hiç fark etmez, sadece tarz meselesi. Sınıfları olan Sınıf üyeleri için varsayılan bir kurucu için gereksiz bir çağrı önler. Düşünün:

class A
{
public:
    A() { x = 0; }
    A(int x_) { x = x_; }
    int x;
};

class B
{
public:
    B()
    {
        a.x = 3;
    }
private:
    A a;
};

Bu durumda, B kurucu A, varsayılan kurucusunu çağırmak ve 6 ** 3 başlatılamıyor. Daha iyi bir yolu B'doğrudan A'In başlatıcı listesi kurucu: . aramak nin kurucu olurdu

B()
  : a(3)
{
}

Bu sadece A'A(int) s ve varsayılan yapıcı yapıcı değil. Bu örnekte, fark önemsİzdİr, ama Aeğer bir hayal edin isterseniz'In varsayılan yapıcı daha fazla, bellek veya dosyaları açma, ayırma yaptı. Bu gereksiz bir hareket yapmak istemezsiniz.

Ayrıca, eğer bir sınıf varsayılan bir oluşturucuya sahip değil ise, ya da const Bir üye değişkeni vargerekirbaşlatma listesi kullanın:

class A
{
public:
    A(int x_) { x = x_; }
    int x;
}

class B
{
public:
    B() : a(3), y(2)  // 'a' and 'y' MUST be initialized in an initializer list;
    {                 // it is an error not to do so
    }
private:
    A a;
    const int y;
};

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hoorahjencar

    hoorahjencar

    6 HAZİRAN 2007
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006
  • Smith Micro Graphics

    Smith Micro

    15 Mayıs 2008