2015-07-01 11 views
5

Bu code bir ctor başka ctor çağırıyor:Kurucu temsilcisi temsilcisi - Bu güvenli midir?

#include <iostream> 
using namespace std; 

class F { 
public: 
    F() { cout << "ctor1\n"; } 
    F(int) { cout << "ctor2\n"; } 
    ~F() { cout << "dtor\n"; } 
}; 
class Foo { 
    F f; 
public: 
    Foo() : f() { cout << "1\n"; } 
    Foo(int i) : f(i) { Foo(); cout << "2\n"; } 
}; 

int main() { 
    Foo object(1); 
    return 0; 
} 

sonuç edilir:

ctor2 
ctor1 
1 
dtor 
2 
dtor 

Hem üye değişkeni f Burada iki kez tahrip görünüyor o Tamam mı?

+0

olduğunu. Bunun ctor1 olması gerektiğini düşünüyorum. Http://coliru.stacked-crooked.com/a/bc8d4be86a5ccebf – user2950911

+0

@ user2950911 Üzgünüm, kodun sürümünü karıştırdım. Kod düzeltildi. – songyuanyao

cevap

8
İşte

Foo(int i) { Foo(); cout << "2\n"; } 

Sen delegating yapıcı kullanmıyorsunuz. Yaptığınız şey kurucu gövdesinde geçici olarak Foo örneğini oluşturmak (ve hemen imha etmek).

yapıcısı için yetki verme doğru sözdizimi ben "ctor2" baskılı ediliyor niçin görmüyoruz, Anton'un cevabı Ayrıca

Foo(int i) : Foo() { cout << "2\n"; } 
+0

Anladım. Teşekkürler! – songyuanyao

İlgili konular