Насколько я понимаю идиому 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()
недоступен)
Texture
более позднюю инициализацию, напримерtex_.init(...)
? - person Kerrek SB   schedule 21.11.2011Skybox
не нужно ничего знать о путях к файлам.Skybox
нужно передавать только вTexture
. ПозвольтеTexture
или другой абстракции обрабатывать ваши знания о файловой системе. - person Tom Kerr   schedule 22.11.2011