SORU
1 EKİM 2008, ÇARŞAMBA


DEMİRYOLU vs. istisnalar

Daha fazla C DEMİRYOLU kullanıyoruz , daha önemsiz olmayan kaldırma yapmak yıkıcılar ile kendimizi bulmak. Şimdi, kaldırma (sonuçlandırılması, ancak isim vermek istersen), özel durumlar gerçekten birini Yukarı kaldırma sorunumuzu bildirmek için tek yol olan başarısız olabilir. Ama sonra tekrar, atma-yıkıcı yığın özel durumlar çözülme sırasında atılan olasılığı nedeniyle kötü bir fikir. std::uncaught_exception() sağlar bilseniz ne olur, ama daha fazla değil, bu yüzden kenara izin günlük mesaj önce fesih pek bir şey yok yapabilirsin, eğer sen istekli bırakın programınızda tanımlanmamış bir devlet, bazı şeyler kaldırıldı/kesinleşmiş ve bazı değil.

Bir yaklaşım atmak yok yıkıcılar. Ama birçok durumda bu sadece gizler gerçek bir hata. Bizim yıkıcı, örneğin, bazı DEMİRYOLU-yönetilen DB bağlantıları bazı istisna bir sonucu olarak atılan kapanış olabilir, ve o DB bağlantıları kapatmak için başarısız olabilir. Mutlaka bu programı bu noktada sona eriyor iyi olduğumuz anlamına gelmez. Öte yandan, bu hatalar günlük izlemeyi gerçekten her durum için bir çözüm değil, aksi takdirde istisnalar ile başlamak gerek. Hayır-atın biz de oluşturmak için kendimiz bulmak zorunda yıkıcılar "() Sıfırla" yıkımdan önce aramış olması gereken fonksiyonları - ama bu sadece DEMİRYOLU bütün amacı yendi.

Başka bir yaklaşım yapabileceğiniz en tahmin edilebilir bir şey olarak let the program terminate, sadece.

Bazı insanlar zincirleme istisnalar Öner, birden fazla hata bir anda ele alınabilir. Ama ben açıkçası hiç C ve böyle bir şeyin nasıl olduğuna dair hiçbir fikrim yok aslında gördüm.

Ya da DEMİRYOLU veya özel durumlar. Değil mi? Daha çok şeyler basit(r) tutar çünkü no-at yıkıcılar; doğru eğilmiş değilim. Ama gerçekten dediğim gibi, daha fazla DEMİRYOLU kullanıyoruz, daha önemsiz olmayan şeyler yaptığını dtors kendimiz kullanıyoruz çünkü daha iyi bir çözüm vardır umarım.

Ek

-Konu makaleler ve tartışmalar buldum ilginç bağlantılar ekliyorum:

CEVAP
1 EKİM 2008, ÇARŞAMBA


SanaOLMAMALIDIRbir yıkıcı bir durum.
Eğer bir istisna zaten sonra yayılıyor ise, uygulama sonlandırılacak.

Sonlandır yani hemen durdurun. Gevşemek durur yığını. Daha fazla yıkıcı denir. Tüm kötü şeyler. Burada tartışma bakın.

http://stackoverflow.com/questions/130117/throwing-exceptions-out-of-a-destructor#130123

Bu yıkıcı, çok daha karmaşık neden katılmıyorum () mantığını anlayamadım.
Akıllı işaretçileri doğru kullanım ile bu gerçekten yıkıcı artık her şeyi otomatik hale geldikçe basit bir hale getiriyor. Her derse bulmaca, kendi küçük parça gelgitler. Beyin cerrahisi ya da roket bilim burada yok. DEMİRYOLU için başka bir Büyük galibiyet.

CYBH olasılığı olarak::uncaught_exception () Herb Sutters article about why it does not work siz de gelin

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • Kamikazeepanda

    Kamikazeepan

    5 ŞUBAT 2006