2012-05-06 29 views
25

Bazen, varsayılan bir kurucu sağlamak istemiyorum, ancak derleyicimin sınıfım için bir sistem varsayılan kurucusu sağlamasını da istemiyorum. Benim öğretim benim ödevi bunu izin vermez andaVarsayılan kurucu nasıl silinir?

class MyClass 
{ 
    public: 
    MyClass() = delete; 
}; 

Ama: C++ 11 ben gibi şeyi yapabilir. Soru şu: C++ 11'den önce, derleyiciye örtülü olarak varsayılan bir kurucu sağlamayı durdurması için bir yol var mı?

cevap

34

varsayılan kurucusunu çağırmak mümkün olacak (sınıf kendisi veya arkadaşı sınıfları dışından)

class MyClass 
{ 
private: 
    MyClass(); 
} 

gibi bir şey ve hiç kimse .. Özel yapmak söyleyebilirim. Ayrıca, sınıfı kullanmak için üç seçeneğiniz olacaktır: parametreli bir kurucu sağlamak ya da bir yardımcı program sınıfı olarak kullanmak (yalnızca statik işlevlere sahip) veya bu tür bir arkadaş sınıfında bir fabrika oluşturmak için.

+0

Scott Meyers adlı kitabında Effective Modern C++ adlı kitabında, özel kurucunuzu tanımsız bırakabilirsiniz. Varsayılan yapıcınızı arkadaş sınıflarından çağırmaya karşı korumanıza yardımcı olacaktır (bağlantı hatası atılacaktır). – MrPisarik

12

Elbette. Kendi kurucunuzu, varsayılan veya başka bir şekilde tanımlayın.

Ayrıca, bunu özel olarak bildirmeniz imkansızdır. Bunu yapmak için statik bir işlev sağlamadığınız sürece, maalesef sınıfınızı tamamen kullanılamaz hale getirir.

İlgili konular