Нужно ли мне handle_scope
, если я хочу только вернуть значение?v8 HandleScope необходимо, когда мне нужно вернуть значение?
Handle<Value> platformName(const Arguments& a) {
HandleScope handle_scope;
return String::New("linux");
}
Нужно ли мне handle_scope
, если я хочу только вернуть значение?v8 HandleScope необходимо, когда мне нужно вернуть значение?
Handle<Value> platformName(const Arguments& a) {
HandleScope handle_scope;
return String::New("linux");
}
Предположив, что функция всегда вызывается из существующей области, нет необходимости для вас, чтобы объявить сферу в рамках этой функции. Выбор включения функций для каждой функции в значительной степени зависит от того, следует ли освобождать память для сбора мусора за каждую функцию. Вероятно, вам это не нужно, и вы должны просто периодически закрывать свою «основную» область, чтобы обеспечить GC.
Если вы хотите создать новую область в этой функции, то правильный метод возврата для вашего примера:
return handle_scope.Close(String::New("linux"));
В этом случае, делать это не даст вам никакой дополнительной ценности, потому что есть нет локальные дескрипторы, созданные в области; есть только тот, который вы возвращаете, который все равно будет в охватывающей области. Но если вы создавали несколько локальных дескрипторов в этой функции, тогда было бы целесообразно заключить их в новую область, чтобы они могли быть GC'ed.
Моя функция называется прямо из JavaScript, предполагает ли она, что она уже имеет область действия и delcaring HandleScope не требуется? – exebook
Не нужно создавать HandleScope. Если вы вызываете из JavaScript, любые локальные дескрипторы, которые вы создаете, будут созданы в области вызова и будут иметь право на GC, когда эта область будет закрыта. –