有关资源管理器类的 RAII 问题

RAII issue regarding resource manager class

本文关键字:RAII 问题 资源管理器      更新时间:2023-10-16

我有一个名为WindowHandlerSDL_Window包装类作为Game类中的类成员。 最好,我想在我的Game::init方法中初始化WindowHandler。但是,该类没有 0-param ctor,因此如果我不初始化初始化列表中的 WindowHandler 变量,程序将中断。有没有办法延迟初始化到Game::init方法?

对此的一般解决方案是

unique_ptr<WindowHandler> window;

而不是普通

WindowHandler window;

成员,然后您可以延迟调用其构造函数。

void Game::init(int arg) {
    window = make_unique<WindowHandler>(arg);
}

它仍然会自动销毁。

(我是技术人员,如果这是一个好或坏的设计,或者它是否违反了 RAII 超出了当前范围)。