İnanılmaz derecede şifreli başlık için özür dilerim.Bir kurucudaki üye ilklendirmesini kullanarak açık bir yapıcının argümanını karşılamak neden sorun değil?
Herb Sutter tarafından "Daha Olağanüstü C++" okuyordum ve "sayılan bir işaretçi" nin bir örneğine rastladım, tüm kodu yapıştırmayacağım, ancak imzayla açık bir kurucu kullanıyor:
explicit countedPointer(P* obj): p(new impl(obj)) {}
Bundan başka, o şekilde kendi sayılır işaretçiyi başlatırken, bu sınıfın yapıcısında, sınıf özel bir üyesi olarak sayılır işaretçi nesnesi olan bir sınıf bildirir:
flagNth(n):pimpl_(new flagNthImpl(n)) {}
, pimpl_, karşı işaretçi nesnesi, yani
countedPointer<flagNthImpl>pimpl_;
Bu kodu ve main.cpp içine kaçmaya çalıştı, ben (kurucu açık olduğundan, belli ki) ben
int main(int argc, const char * argv[])
{
countedPointer<int> cp = new int(5);
}
Benim sorum bir hata alıyorum aşağıdakileri yapın denerseniz, Bunun yerine, bir kurucunun üye başlangıç listesi içinde bunu yapmak neden sorun değil? Başlatma, bir şekilde düzenli bir başlangıçtan farklıdır ve eğer öyleyse, nasıl?
Teşekkür ederiz!
' pimpl_ ((n) yeni flagNthImpl) (yeni int (5))' – NathanOliver
'countedPointer cp = new int (5); '' bir atama değil, bir başlatma olan countedPointer cp (new int (5)); 'sınıf sözdizimi ile aynıdır ve çalışmalıdır. –
djgandy
@djgandy Bu kesinlikle bir atama değil **. Bu, kopyalamanın başlatılmasıdır, ancak yine de ** initialisation **. – Angew