SORU
8 HAZİRAN 2012, Cuma


yeni std atış::özel durum vs atmak std::özel durum

bazı kod bakarken rastladım:

throw /*-->*/new std::exception ("//...

ve ben her zaman new burada kullanmamalısın/ihtiyacın olmadığını düşündüm.
Doğru şekilde, yani orada herhangi bir fark ise her iki OK, ne var?

BTW "grepping PowerShell libs boost ile" asla throw new kullanın. ederken gördüğüm kadarıyla

P. S. ayrıca throw gcnew kullanan bazı CLİ kodu buldum. TAMAM mı?

CEVAP
9 HAZİRAN 2012, CUMARTESİ


Ve özel durum yakalamak için geleneksel bir özel durum nesnesi atmak ve referans (genellikle const referans) ile onu yakalamak. C dili derleyicisi özel durum nesnesi oluşturmak ve düzgün uygun bir zamanda temizlemek için gerekli kodu oluşturmak için gereklidir.

Dinamik olarak ayrılan bir nesneye bir işaretçi atmak hiç iyi bir fikir değil. Özel durumlar hata koşullar karşısında daha sağlam kod yazmak için izin gerekiyor. Eğer bir istisna atar nesne geleneksel şekilde olmak emin olup olmadığını tarafından yakalanan bir catch tümcesi adlandırma doğru yazın tarafından catch (...), sonra yeniden atılmış veya yok olur doğru en uygun zaman. (Tek istisna, eğer olmak hiç yakalanıyor ama bu nereden bakarsan bak düzeltilemez bir durum.)

Eğer atmak bir işaretçi için bir dinamik olarak ayrılan nesne var olduğundan emin olun, ne olursa olsun çağrı yığını gibi görünüyor, bu noktada ister at özel bir catch bloğu bu isimler doğru işaretçi türü vardır ve en uygun delete Ara. Size özel asla bu doğru dışında bir şey yapamaz o zaman başka bir catch bloğu yakalandı yeniden atar özel durum bloğu sürece catch (...) tarafından yakalandı gerekir.

Etkili bir şekilde, daha sağlam kod yazmak gerektiğini istisna işleme özelliği çektiğiniz anlamına gelir ve çok zor durumlarda doğru kod yazmak için yapılmış. Bu neredeyse imkansız kütüphane kod olarak hareket etmek için bu özelliği bekliyor olmayacak istemci kodu için olacak bu sorunu bir kenara bırakarak.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google

    Google

    18 EYLÜL 2005
  • Hak5

    Hak5

    7 EYLÜL 2005
  • kev5124

    kev5124

    9 Kasım 2008