类成员在头文件中初始化是否违反RAII机制?
问题解答
关于RAII机制的遵循
是的,my_var_完全遵循RAII机制。
作为Thing类的非静态私有成员,它的生命周期和所属的Thing对象严格绑定:
- 当
Thing对象被构造时,my_var_会在Thing构造函数体执行前完成初始化(这里用{}做值初始化,会调用OtherThing的默认构造函数); - 当
Thing对象被销毁时,my_var_会在Thing析构函数体执行后自动被销毁,销毁顺序和构造顺序相反。
只要OtherThing本身是符合RAII设计的类(比如其析构函数会自动释放持有的资源),my_var_持有的资源就会被自动、正确地管理,不需要手动调用销毁逻辑。
关于生命周期范围
my_var_的生命周期绝对不会超出Thing类对象的作用域。
非静态成员变量是所属对象的一部分,它的存储位置和Thing对象完全一致:如果Thing对象在栈上,my_var_也在栈上;如果Thing对象在堆上,my_var_也在堆上。只有当Thing对象存在时,my_var_才存在;Thing对象被销毁的瞬间,my_var_也会随之销毁,不可能单独存活或超出Thing对象的作用域。
内容的提问来源于stack exchange,提问作者tjcertified
相关产品推荐
相关产品推荐

