วิธีทั่วไปในการโยนและจับข้อยกเว้นคือการโยนวัตถุยกเว้นและจับโดยอ้างอิง (โดยปกติจะconst
อ้างอิง) ภาษา C ++ ต้องการให้คอมไพเลอร์สร้างโค้ดที่เหมาะสมเพื่อสร้างอ็อบเจ็กต์ข้อยกเว้นและทำความสะอาดอย่างถูกต้องในเวลาที่เหมาะสม
การโยนตัวชี้ไปยังวัตถุที่จัดสรรแบบไดนามิกไม่ใช่ความคิดที่ดี ข้อยกเว้นควรจะช่วยให้คุณสามารถเขียนโค้ดที่มีประสิทธิภาพมากขึ้นเมื่อเผชิญกับเงื่อนไขข้อผิดพลาด หากคุณโยนวัตถุข้อยกเว้นในลักษณะทั่วไปคุณสามารถมั่นใจได้ว่าวัตถุนั้นถูกจับโดยประโยคจับที่ตั้งชื่อประเภทที่ถูกต้องโดย a catch (...)
ไม่ว่าจะโยนซ้ำหรือไม่ก็ตามจะถูกทำลายอย่างถูกต้องในเวลาที่เหมาะสม (ยกเว้นอย่างเดียวคือถ้ามันไม่เคยถูกจับได้เลย แต่นี่เป็นสถานการณ์ที่ไม่สามารถกู้คืนได้ไม่ว่าคุณจะมองไปทางใดก็ตาม)
หากคุณโยนตัวชี้ไปยังวัตถุที่จัดสรรแบบไดนามิกคุณต้องแน่ใจว่าสิ่งที่ call stack มีลักษณะเป็นอย่างไร ณ จุดที่คุณต้องการทิ้งข้อยกเว้นของคุณจะมี catch block ที่ตั้งชื่อประเภทตัวชี้ที่ถูกต้องและมีการdelete
เรียกที่เหมาะสม ข้อยกเว้นของคุณจะต้องไม่ถูกจับได้catch (...)
เว้นแต่ว่าบล็อกนั้นจะโยนข้อยกเว้นอีกครั้งซึ่งจะถูกจับโดยบล็อกอื่นที่จัดการกับข้อยกเว้นได้อย่างถูกต้อง
อย่างมีประสิทธิภาพหมายความว่าคุณได้ใช้คุณสมบัติการจัดการข้อยกเว้นซึ่งจะทำให้ง่ายต่อการเขียนโค้ดที่มีประสิทธิภาพและทำให้ยากมากที่จะเขียนโค้ดที่ถูกต้องในทุกสถานการณ์ นี่เป็นการทิ้งปัญหาที่แทบจะเป็นไปไม่ได้เลยที่จะทำหน้าที่เป็นรหัสไลบรารีสำหรับรหัสไคลเอนต์ที่ไม่คาดหวังคุณสมบัตินี้
throw gcnew
จะมีประโยชน์เช่น หากคุณต้องการให้โค้ดที่มีการจัดการตรวจจับข้อยกเว้นของคุณ ใครช่วยแก้ไขให้ฉันที