2010-08-29 11 views
6
İşte

denilen Çok fazla yıkıcılar (ayrıca http://pastebin.com/yw5z2hnG de) kodudur aradı.C++ kadar az nesneler

+1

Birden çok kez yineleniyor ... ama onları bulamıyorum Bu soruyu soran insanların genellikle örtük olarak tanımlanmış kopya kurucularından haberi olmamasına neden olur: p Her zaman cehaletin birisinin öğrenmesini engelleyebildiğini, çünkü birisinin etkili bir şekilde sorgulanmasını engelleyeceğini çok komik buluyorum. –

cevap

14

Kendi kopya kurucu tanımlamak Eğer diğer nesneleri inşa edilmektedir göreceksiniz:

class X 
{ 
    public: 
    int i; 
    X(const X&); 
    X(); 
    ~X(); 
}; 

X::X(const X& x) : i(x.i) 
{ 
    cout << "---copy constructor\n"; 
} 

// ... rest as before 

derleyici kendi birini beyan yoksa hiçbir günlüğü gerçekleştiren bir kopya kurucu sağlayacaktır.

+0

+1: Kapalı kopya nedenleridir. – Puppy

1

Bir daha ayrıntı - Eğer önceden vektörü için yer ayrılması halinde: Ayrıca vektör kopya tüm gördüğünüz gibi

---constructor 
+++ copy constructor 
***desctructor 
---constructor 
+++ copy constructor 
***desctructor 
... 

:

int main() 
{ 
    vector<X> *vx = new vector<X>; 
    vx->reserve(5); 
    .... 

Sonra şu çıktıyı alırsınız onun depolama alanı yeniden tahsis etmek için gerekli olduğunda onun elemanları - bu nedenle son kopyalamak için 5 kopya kurucular ve yıkıcılar olsun push_back()

+0

Cevabınız çok yardımcı oldu. Mümkün olan yerlerde, sadece vektörleri değil, yer ayırırım. Programım çok daha hızlı çalışıyor. Teşekkürler! – Xolve