C++外部代码的垃圾回收

Garbage Collection of C++ externals

本文关键字:外部 代码 C++      更新时间:2023-10-16

我在C++中为一些AI问题制作了一个connect-4游戏,并将其作为插件连接到nodejs web服务器。

我是这样工作的:

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++的口号下,只为你使用的东西付费,没有垃圾收集。这意味着你需要自己管理内存。在这种特定情况下,您有两个选项:

  1. 不要用new做游戏。根据您的应用程序,仅使用Game game;可能就足够了
  2. 如果您确实需要newGame,请将新的封装在RAII(资源获取是初始化)习惯用法类型中。您可以利用c++智能指针:

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

    unique_ptr的作用域结束时,它所包含的内存将自动释放。