2
การจัดการคอมไพเลอร์ของตัวแปรอินเทอร์เฟซโดยนัยมีการบันทึกไว้หรือไม่?
ฉันถามคำถามที่คล้ายกันเกี่ยวกับตัวแปรอินเทอร์เฟซโดยนัยเมื่อไม่นานมานี้ ที่มาของคำถามนี้คือข้อบกพร่องในโค้ดของฉันเนื่องจากฉันไม่ทราบถึงการมีอยู่ของตัวแปรอินเทอร์เฟซโดยนัยที่สร้างโดยคอมไพเลอร์ ตัวแปรนี้ได้รับการสรุปเมื่อขั้นตอนที่เป็นเจ้าของเสร็จสิ้น สิ่งนี้ทำให้เกิดข้อผิดพลาดเนื่องจากอายุการใช้งานของตัวแปรนานกว่าที่ฉันคาดไว้ ตอนนี้ฉันมีโครงการง่ายๆที่จะแสดงพฤติกรรมที่น่าสนใจบางอย่างจากคอมไพเลอร์: program ImplicitInterfaceLocals; {$APPTYPE CONSOLE} uses Classes; function Create: IInterface; begin Result := TInterfacedObject.Create; end; procedure StoreToLocal; var I: IInterface; begin I := Create; end; procedure StoreViaPointerToLocal; var I: IInterface; P: ^IInterface; begin P := @I; P^ := Create; end; begin StoreToLocal; StoreViaPointerToLocal; end. StoreToLocalรวบรวมตามที่คุณคิด ตัวแปรท้องถิ่นIผลฟังก์ชั่นที่จะถูกส่งเป็นนัยพารามิเตอร์var …