Neden üye başlatma listesi kullanmayı tercih etmeliyim? | Netgez.com
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

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • Rootjunky.com

    Rootjunky.co

    22 EKÄ°M 2011
  • Tianna Sierra Dance

    Tianna Sierr

    16 EYLÃœL 2013