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

时间:2016-03-02 16:13:16

标签: c++ c++11 raii

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

1 个答案:

答案 0 :(得分:3)

对此的一般解决方案是

unique_ptr<WindowHandler> window;

而不是普通的

WindowHandler window;

成员,然后你可以延迟调用它的构造函数。

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

它仍会自动销毁。

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