İstisnaları atmanın ve yakalamanın geleneksel yolu, bir istisna nesnesi atmak ve onu referansla yakalamaktır (genellikle const
referansla) . C ++ dili, derleyicinin istisna nesnesini oluşturmak için uygun kodu oluşturmasını ve uygun zamanda düzgün bir şekilde temizlemesini gerektirir.
Dinamik olarak ayrılmış bir nesneye bir işaretçi fırlatmak asla iyi bir fikir değildir. İstisnaların, hata durumları karşısında daha sağlam kod yazmanıza olanak sağlaması beklenir. Geleneksel bir şekilde bir istisna nesnesi atarsanız, doğru türü adlandıran bir catch cümlesine yakalanmış catch (...)
olup olmadığından, daha sonra yeniden fırlatılıp atılmayacağından emin olabilirsiniz, uygun zamanda doğru şekilde imha edilecektir. (Tek istisna, hiç yakalanmamasıdır, ancak bu, hangi şekilde bakarsanız bakın kurtarılamaz bir durumdur.)
Dinamik olarak tahsis edilmiş bir nesneye bir işaretçi atarsanız, istisnanızı atmak istediğiniz noktada çağrı yığını nasıl görünürse görünsün, doğru işaretçi tipini adlandıran ve uygun delete
çağrıya sahip bir yakalama bloğu olduğundan emin olmalısınız . İstisnanız, catch (...)
bu blok istisnayı yeniden atmadıkça, daha sonra istisna ile doğru şekilde ilgilenen başka bir yakalama bloğu tarafından yakalanmadıkça asla yakalanmamalıdır .
Etkili bir şekilde, bu, sağlam kod yazmayı kolaylaştıracak ve her durumda doğru olan kodu yazmayı çok zorlaştıracak istisna işleme özelliğini aldığınız anlamına gelir. Bu, bu özelliği beklemeyen istemci kodu için kütüphane kodu olarak hareket etmenin neredeyse imkansız olacağı sorununu bir kenara bırakıyor.
throw gcnew
Örneğin yararlı olacağını düşünüyorum . yönetilen kodun istisnanızı yakalamasını istiyorsanız. Biri beni bu konuda düzeltebilir mi?