2014-02-13 59 views

回答

2

假定您的函數總是從現有的範圍調用,您不需要在此函數中聲明範圍。選擇包含每個函數的作用域在很大程度上是選擇是否釋放內存以實現每個函數的垃圾收集。您可能不需要這樣做,並且應該定期關閉您的「主」範圍以允許GC發生。

如果你想在這個函數來創建一個新的範圍,然後回報你的榜樣的正確方法是:

return handle_scope.Close(String::New("linux")); 

在這種情況下,這樣做會給你帶來更多附加價值,因爲沒有在範圍中創建的本地句柄;只有你正在返回的那個,無論如何它都在封閉的範圍內。但是如果你在這個函數中創建了幾個本地句柄,那麼將它們放在一個新的作用域中可能是值得的,因此它們可以被GC化。

+0

我的功能是從JavaScript調用的,它是否假設它已經有一個範圍,並且除了HandleScope是不必要的? – exebook

+1

不需要創建HandleScope。如果從JavaScript中調用,則創建的任何本地句柄將在調用的範圍內創建,並且在該範圍關閉時適用於GC。 –

相關問題