当我只需要返回一个值时,是否需要v8 HandleScope?

时间:2014-02-13 05:51:17

标签: v8 embedded-v8

如果我只想返回值,是否需要handle_scope

Handle<Value> platformName(const Arguments& a) {
    HandleScope handle_scope;
    return String::New("linux");
}

1 个答案:

答案 0 :(得分:2)

假设您的函数始终是从现有范围调用的,那么您无需在此函数中声明范围。包含范围每个函数的选择在很大程度上是一个选择,是否为每个函数的垃圾收集释放内存。你可能不需要那个,而且应该定期关闭你的主要&#34;允许GC发生的范围。

如果您想在此函数中创建新范围,那么您的示例的正确返回方法是:

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

在这种情况下,这样做不会给你额外的价值,因为在范围内没有创建本地句柄;只有你要归还的那个,无论如何都会在封闭的范围内。但是如果你在这个函数中创建了几个本地句柄,那么将它们放在一个新的范围中是值得的,这样它们就可以被GC编辑。