Son zamanlarda, iyi aldığım C++ FAQ numaralı kurucular hakkında çok fazla şey okuyordum. Girişlerden biri, sınıf üyelerini kurucunun kendisinin kod bloğu içinde başlatmanın aksine, başlatma listelerini kullanmak her zaman en iyisi olduğunu belirtmektedir.İşaretçi Olmayan Sınıf Üyelerinin Başlatılması
Bunun nedeni, derleyicinin yalnızca bir kopyadan ziyade sınıf üyelerinin birden çok kopyasını oluşturma eğiliminde olmasıdır.
İyi Örnek
Foo::Foo(void)
: mBar(new Bar) //pointer to some memory address
{
}
Bad Bu kurucular ilgili olsa da, devletler (ve
Foo::Foo(void)
{
mBar = new Bar;
}
bir şey, o da saf ilgilidir cinslerde nesnelerin başlatılması Hatta üye olmayan işlevlerden l) olacak şekilde aşağıdaki gibi yöntemlerle bir nesne başlatırken:
void f(void)
{
Foo foo(Bar()); //Bad.
foo.x(); //error
}
Göreceksin, ben alıntı: "[declare] a non-member function that returns a Foo object"
.
Hatta bu:
şu var
Soru Bundan dolayı
, bu akıllıca (daha fazla bilgi için, yukarıdaki bağlantıyı tıklayın)
Geometry::Geometry(void)
: mFaces(QVector<GLushort>),
mFinalized(false),
mNormals(QVector<QVector3D>),
mVerticies(QVector<QVector3D>)
hese tahsis edilmiştir (yani, bunların işaretçiler olmadığı gerçeği), bu nesnelerin başlangıçta bile başlangıçta İHTİYAÇLARININ GEREKSİNİMİ OLMADIĞINI merak ediyor. Eğer yaparlarsa, bu doğru bir gidiş yolu mu? Veya daha iyi bir başlatma yöntemi var mı?
bunun nedeni C++ yapıcı başlatma arkasında metodoloji Ben cahil değilim gerçeği ile birlikte, yapıcı işlevlerini kullanarak hem başlatılıyor nesnelere ilişkin bu şekilde söz
Bu genel soru ile ilgilidir ilgilidir nasıl yığında tahsis edilen nesnelerin olup olmadığına - veya, yine de inanıyorum ki - (her iki şekilde de, işaret ayırmadan nesneler) bile, ilk etapta başlatmaya ihtiyaç duyar.
Yani, yukarıdaki kodlara göre, sadece ayırdığım nesnelerin birden çok kopyasını yaratıyorum? – zeboidlund
'mFaces (QVector < GLushort >())' işlevini kullandığınızda, geçici bir QVector 'oluşturun, bu geçici nesneden 'mFaces' yapısını kopyalayın ve sonra bu geçici nesneyi yok edin. Yani, evet, gereğinden fazla nesne yaratıyorsun. –