gpt4 book ai didi

c++ - RAII如何应用于需要扩展初始化的类成员?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:08:08 25 4
gpt4 key购买 nike

据我所知,当 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 Skybox::init_tex(std::string const& fileName) {
// read stuff from file, including textureFile
// initialize result
return Texture(...);
}

Skybox::Skybox(std::string const& fileName):
tex_(init_tex(fileName))
{ }

初始化函数应该是一个静态函数。如果不是,小心不要使用任何尚未初始化的成员——你正在调用 init_tex 一个尚未完全初始化的 Skybox 实例.

关于c++ - RAII如何应用于需要扩展初始化的类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8215870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com