C++ 外部的垃圾收集

Garbage Collection of C++ externals

我用 C++ 制作了一个 connect-4 游戏来解决一些 AI 问题,并将其作为插件连接到 nodejs 网络服务器。

我是这样工作的:

  v8::Isolate *isolate = v8::Isolate::GetCurrent();
  Game *game_ptr = new Game();
  game_ptr->nextPlayer();

  Local<ObjectTemplate> game_template = ObjectTemplate::New(isolate);
  game_template->SetInternalFieldCount(1);
  Local<Object> game = game_template->NewInstance();
  game->SetInternalField(0, External::New(isolate, game_ptr));

我的问题是:游戏(被用作v8::External)是垃圾收集还是我应该自己管理内存?

如果我应该管理内存,最佳做法是什么?

c++ 的信条下,只为使用的东西付费,没有垃圾收集。这意味着您需要自己管理内存。在这种特定情况下,您有 2 个选择:

  1. 不要用new做游戏。根据您的应用程序,仅使用 Game game; 可能就足够了。
  2. 如果你真的需要newGame,将新的包裹在RAII(资源获取即初始化)成语类型中。您可以利用 c++ 智能指针:

    auto game_ptr = std::make_unique<Game>();

    unique_ptr的范围结束时,它包含的内存将自动释放。