【发布时间】:2016-02-07 02:07:41
【问题描述】:
我有一个函数,它将参数的值存储到 C++ 类的 std::vector<v8::Local<v8::Value>> 属性中,像这样公开为 ObjectWrap:
NAN_METHOD(MyObject::Write) {
MyObject* obj = Nan::ObjectWrap::Unwrap<MyObject>(info.This());
obj->data.push_back(info[0]);
}
但是,当我尝试从另一个 C++ 函数读回值时,该值丢失,变为undefined。
我将一个数字传递给MyObject::Write,我可以确认info[0]->IsNumber() 在将其推送到向量之前返回true,但是在读回它时,值它不是编号,实际上对于我使用来自 v8::Value 的 Is<Type> 方法测试的所有类型返回 false,但对于 BooleanValue() 仍然返回 true。
我的猜测是该变量在MyObject::Write 返回后被垃圾回收,但我不知道如何防止这种情况发生。
我目前正在尝试将该值初始化为Persistent 值。我尝试了以下尝试但没有成功:
Nan::CopyablePersistentTraits<v8::Value>::CopyablePersistent p;
Nan::Persistent<v8::Value> persistent(info[0]);
Nan::CopyablePersistentTraits::Copy(persistent, p);
还有:
v8::Isolate *isolate = info.GetIsolate();
v8::Persistent<v8::Value, v8::CopyablePersistentTraits<v8::Value>> persistent(isolate, info[0]);
但是遇到大量 C++ 错误。
【问题讨论】:
标签: c++ garbage-collection v8