Насколько я понимаю идиому RAII применительно к ресурсам, необходимым для класса (и, пожалуйста, исправьте меня, если я ошибаюсь), класс, которому требуется ресурс, должен определить члена соответствующего типа, и его деструктор будет вызываться автоматически при уничтожении экземпляра класса using, например:
class Skybox
{
public:
Skybox() : tex_(...) {}
private:
Texture tex_;
};
Помимо использования интеллектуального указателя для выделения ресурса в куче, как можно применить этот шаблон, если член ресурса требует выполнения некоторого кода в конструкторе Skybox
перед инициализацией ресурса? Например:
class Skybox
{
public:
Skybox(const std::string& fileName);
private:
Texture tex_;
}
Skybox::Skybox(const std::string& fileName)
{
// read stuff from skybox initialization file
// including various texture parameters such as texture file
...
// initialize tex_ based on information read above
}
Обновление: класс Texture
требует, чтобы вся инициализация была выполнена в его конструкторе (т. Е. Метод Texture::Init()
недоступен)