SORU
17 Ocak 2013, PERŞEMBE


Yıkıcı yapıcı atma sonra aradı

Eğer yapıcı bir istisna, "kısmen inşa edilmiş bu yıkıcı atar bence C kullandım ...

Ama gerçek C 11 artık değil gibi görünüyor: derlenmiş g ve parmak izi ile aşağıdaki kodu "X destructor" konsol. Neden bu?

#include <exception>
#include <iostream>
#include <stdexcept>
using namespace std;

class X
{
public:
    X() : X(10)
    {
        throw runtime_error("Exception thrown in X::X()");    
    }
    X(int a)
    {
        cout << "X::X(" << a << ")" << endl;
    }
    ~X()
    {
        cout << "X destructor" << endl;
    }
};

int main()
{
    try
    {
        X x;
    }
    catch(const exception& e)
    {
        cerr << "*** ERROR: " << e.what() << endl;
    }
}

Çıktı

Standard out:
X::X(10) 
X destructor
Standard error: 
*** ERROR: Exception thrown in X::X()

CEVAP
17 Ocak 2013, PERŞEMBE


Delege constuctors gerçekten yeni bir mantık yıkım getiren yeni bir özelliktir.

Bize yeniden değerlendirelimömür boyubir nesnenin ne zaman başlar, Bir nesnenin ömrübazıkurucu tamamladı. (15,2 ve/2. Standart bu çağrıları "asıl kurucu".) Senin durumunda, bu 5 ** kurucu. İkinci olarak, delege kurucu X() sadece düz bir üye olarak artık işlev görür. Kapsamı üzerine gevşemek, yıkıcılar tam yapılandırılmış nesneler olarak adlandırılır ve bu x içerir.

Etkileri bu aslında oldukça derin: artık koy "karmaşık" iş yükü içine bir kurucu ve almak dolu avantaj her zamanki istisna yayma sürece yaptığınız kurucu temsilci için bir yapıcı. Böyle bir tasarım çeşitli ihtiyaç ""normal bir kurucu çok fazla iş koymak için istenen değildi o zaman. popüler olmak için kullanılan-fonksiyonları başlatma önlemek olabilir

Gördüğünüz davranışları tanımlayan belirli bir dil

[C 11: 15.2/2]:[..]Bir nesne için olmayan delege yapıcı benzer şekilde, yürütme ve bir istisna çıkar, bu nesne için temsilci seçme bir kurucu tamamladı, nesnenin yıkıcı çağrılacak.[..]

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DJPixcell

    DJPixcell

    20 NİSAN 2007
  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • NYLON Video

    NYLON Video

    11 Aralık 2006