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
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 A
eğ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;
};
Neden/ne zaman Oktav üzerinde MATLAB t...
Neden char[] şifreler için Dize Java t...
Neden karma tablo üzerinde Sözlük terc...
Neden Listesi< devralır;T>?...
Yapıcı başlatma listesi değerlendirme ...