1
我有一個使用lua的C++程序。 C++使用指定的終結器將引用計數數據類型公開爲userdata,以便lua可以獲取這些值的所有權。lua垃圾收集錯誤?
這工作正常。但有一件事讓我擔心:如果在lua持有該數據類型的實例時發生執行腳本的錯誤,那麼會調用終結器?
問題的另一個表述是:lua是否在出錯時運行垃圾回收循環?
我有一個使用lua的C++程序。 C++使用指定的終結器將引用計數數據類型公開爲userdata,以便lua可以獲取這些值的所有權。lua垃圾收集錯誤?
這工作正常。但有一件事讓我擔心:如果在lua持有該數據類型的實例時發生執行腳本的錯誤,那麼會調用終結器?
問題的另一個表述是:lua是否在出錯時運行垃圾回收循環?
是的,如果錯誤發生在受保護的調用中,一切都會繼續正常運行。如果Lua驚慌失措,那麼Lua狀態不是可用狀態。
請注意,如果你在C++中使用Lua,你應該將Lua本身編譯爲C++代碼,或者對於對象的生命週期非常小心。在普通的C中,Lua會對任何錯誤(包括C API中的錯誤)進行'longjump()',並帶來所有預期的後果。 – 2011-04-20 10:42:15