Inhering node :: objectWrap против оболочки класса

Предположим, у меня есть класс C ++:

class cClass {
public:
methodA();
methodB();
private:
//private stuff
}

Я могу привязать этот класс к Node двумя способами:

Метод I — наследование node :: objectWrap напрямую

class cClass : public node::ObjectWrap {
public:
static void Init(v8::Handle<v8::Object> exports);
methodA();
methodB();
private:
static v8::Handle<v8::Value> New(const v8::Arguments& args);
//private stuff
}

Таким образом, я редактирую структуру класса напрямую. Но есть более простой способ, и это:

Метод II — сохранение ссылки на оригинальный класс внутри

class cClassWrapper : public node::ObjectWrap {
public:
static void Init(v8::Handle<v8::Object> exports);
private:
static v8::Handle<v8::Value> New(const v8::Arguments& args);
cClass internal_;
}

Обратите внимание на метод II cClassWrapper имеет только одно внутреннее поле, и это internal_, Просто cClassWrapper пользователь cClass и внутренности cClass нетронутым

Очевидно, что метод II проще реализовать, так как структура класса cClass не тронут, но мне интересно, в чем его минус (если есть?). Удаляет ли сборщик мусора в v8 internal_ когда я прохожу cClassWrapper вокруг?

Я не уверен, каковы различия между этими двумя реализациями.

1

Решение

Параметр секунд, как правило, лучше с точки зрения архитектуры: вы получаете класс, полностью отделенный от v8. Затем его можно переместить в какую-нибудь внешнюю библиотеку, вы можете независимо отслеживать изменения (используя git или другие vcs) реализации и привязок и т. Д.

Недостатком является потенциальное снижение производительности, которое, вероятно, незначительно. Это никак не влияет на поведение сборщика мусора, все поля ObjectWrap управляются ObjectWrap реализация.

1

Другие решения


По вопросам рекламы [email protected]