ฉันมีรหัสที่มีอยู่นี้ซึ่งพวกเขามีชั้นเรียนและวิธีการเริ่มต้นในชั้นเรียนนั้น คาดว่าเมื่อวัตถุของคลาสถูกสร้างขึ้นพวกเขาจำเป็นต้องเรียกใช้การเตรียมใช้งานกับมัน
เหตุผลทำไมมีวิธีการเตรียมใช้งาน วัตถุที่ถูกสร้างขึ้นก่อนที่จะมีขอบเขตทั่วโลกและจากนั้นวิธีการเริ่มต้นได้รับการเรียกในภายหลังหลังจากโหลด dll ซึ่งมันขึ้นอยู่กับ
ปัญหาเกี่ยวกับการเริ่มต้น คลาสตอนนี้มีบูล isInitialized ซึ่งจำเป็นต้องตรวจสอบในทุกวิธีก่อนที่จะดำเนินการและส่งกลับข้อผิดพลาดหากไม่ได้เริ่มต้น พูดง่ายๆคือมันเป็นความเจ็บปวดครั้งใหญ่
ทางออกหนึ่งที่เป็นไปได้ เริ่มต้นในตัวสร้าง มีเพียงตัวชี้ไปยังวัตถุในขอบเขตส่วนกลาง สร้างวัตถุจริงหลังจากที่โหลด dll
ปัญหาเกี่ยวกับการแก้ปัญหาข้างต้น ทุกคนที่สร้างวัตถุของคลาสนี้จำเป็นต้องรู้ว่ามันจะต้องมีการสร้างหลังจากโหลด dll หรือมิฉะนั้นมันจะล้มเหลว
เป็นที่ยอมรับหรือไม่?
call_once
ใน C โครงการที่ไม่ได้อยู่ใน C ++ 11 ควรศึกษาว่า call_once ถูกนำไปใช้ใน C ++ 11 ได้อย่างไร (เน้นที่ปัญหาที่แก้ได้และวิธีการ) แล้วนำไปใช้ใหม่ในรสชาติ (เก่า) ของ C ++ มันจำเป็นต้องมีการซิงโครไนซ์ที่ปลอดภัยแบบหลายเธรดแบบดั้งเดิมซึ่งรัฐจะต้องเริ่มต้นแบบคงที่ (ด้วยค่าคงที่) โปรดทราบว่าคอมไพเลอร์ pre-C ++ 11 อาจมี idiosyncrasies อื่น ๆ ที่จำเป็นต้องได้รับ