c++ - 关于资源管理器类的 RAII 问题

标签 c++ c++11 raii

我有一个名为 WindowHandlerSDL_Window 包装器类作为我的 Game 类中的类成员。最好,我想在我的 Game::init 方法中初始化 WindowHandler。但是,该类没有 0 参数构造函数,因此如果我不在初始化列表中初始化 WindowHandler 变量,程序就会中断。有没有办法延迟对 Game::init 方法的初始化?

最佳答案

解决这个问题的一般方法是

unique_ptr<WindowHandler> window;

而不是普通的

WindowHandler window;

成员,那么就可以延迟调用它的构造函数了。

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

而且还是会自动销毁。

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

关于c++ - 关于资源管理器类的 RAII 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35752518/

相关文章:

c++ - 应用内存使 golom 序列变慢

python - 有没有办法从 C++ 调用 `async` python 方法?

c++ - Visual Studio 构建错误 : unresolved external symbol _IID_IWICImagingFactory (MFC static lib)

c++ - 在 c++ 中传递内联临时类需要是 const。如何解决这个问题

python - Python 中的 RAII - 离开作用域时自动销毁

c# - 如何在 C# 程序中以 RAII 样式管理 COM 对象运行时?

c - 在纯 C 中实现 RAII?

C++17 static 和 constexpr

c++ - 为多个类或函数声明一次模板<typename T>

C++ 使用传递函数