C++ 存储v8::本地<;v8::对象>;类中的静态std::vector

C++ 存储v8::本地<;v8::对象>;类中的静态std::vector,c++,node.js,v8,C++,Node.js,V8,我想将v8::Local存储在std::vector类型的类静态容器中 它是class.h的: class SomeClass : public node::ObjectWrap { public: static void Init(Handle <Object> exports); static Handle <Object> NewInstance(); static std::vector<Local<Object>*>

我想将v8::Local存储在std::vector类型的类静态容器中

它是class.h的

class SomeClass : public node::ObjectWrap {
public:
    static void Init(Handle <Object> exports);
    static Handle <Object> NewInstance();
    static std::vector<Local<Object>*> container;
private:
    SomeClass();
    ~SomeClass();

    static NAN_METHOD(New);
    static Persistent <Function> constructor;
};
如果调用
类::NewInstance
两次,则返回的第二个对象与第一个对象不同

Local<Object> instance1 = TheClass::NewInstance();
Local<Object> instance2 = TheClass::NewInstance(); // is not the same with instance 1
localinstance1=class::NewInstance();
Local instance2=类::NewInstance();//与实例1不同

函数
类::NewInstance()
包含未定义的行为。您正在将指向
实例
的指针推入向量,但一旦该对象超出范围(即从函数返回),该对象将被销毁。由于
实例
具有自动存储持续时间,因此它可能位于堆栈上,并且它占用的内存最终将被覆盖。下次访问向量中的元素时,它不再是有效对象,任何使用它的尝试都将无法预测。这意味着当您访问它时,对象的内容将是随机垃圾,与您将其推送到堆栈上时不同

如何解决这个问题取决于各种各样的事情,但可以从将向量更改为开始

std::vector<Handle<Object>> container;
container.push_back(instance);

这将允许
Handle
按值存储,并自动管理它引用的对象的生存期。

问题来自类型
std::vector
。我必须使用
std::vector
,然后将该对象存储为
持久性

container.push_-back(Persistent::New(instance));

设置断点,并确保每次调用
NewInstance
NewInstance
i
都是正确的值,并且
return*容器在(i)处已执行。对。请看我之前的评论,这样我就不必重复了。对不起,我编辑了我的问题。假设
i=0
问题仍然存在。这是不可能的。其他地方的代码导致了这种情况。用一个命令调试。
container.push_back(instance);
container.push_back(Persistent<Object>::New(instance));