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 个选择:
- 不要用
new
做游戏。根据您的应用程序,仅使用 Game game;
可能就足够了。
如果你真的需要new
Game
,将新的包裹在RAII(资源获取即初始化)成语类型中。您可以利用 c++
智能指针:
auto game_ptr = std::make_unique<Game>();
当unique_ptr
的范围结束时,它包含的内存将自动释放。
我用 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 个选择:
- 不要用
new
做游戏。根据您的应用程序,仅使用Game game;
可能就足够了。 如果你真的需要
new
Game
,将新的包裹在RAII(资源获取即初始化)成语类型中。您可以利用c++
智能指针:auto game_ptr = std::make_unique<Game>();
当
unique_ptr
的范围结束时,它包含的内存将自动释放。