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

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • fast2hell

    fast2hell

    16 AĞUSTOS 2006
  • NikkoNantone

    NikkoNantone

    21 Kasım 2011