Dee*_*ika 2 c++ scope class object
如果我有类似的课程
class sample{
// ...
} obj;
Run Code Online (Sandbox Code Playgroud)
obj上面创建的对象的范围是什么?什么时候会毁坏这个物体?
范围obj与类定义的范围相同.如果在所有函数之外定义它,它的作用域将是全局的,它将在静态初始化时创建和初始化,并在程序终止时被销毁.
但是,也可以在函数中定义这样的对象.在这种情况下,它将在函数返回时创建并在函数返回时销毁.
void test()
{
class sample{ }obj;
}
Run Code Online (Sandbox Code Playgroud)
是完全有效的代码.
您还可以将其定义为类中的嵌套类型.在这种情况下,obj将是该类的成员变量.它将通过构造和销毁包含类的对象来创建和销毁.
struct Foo
{
class sample{ }obj;
};
Run Code Online (Sandbox Code Playgroud)
也(感谢是由于@sjdalessandro指点出来),如果对象在库中具有全局范围定义,并且该库是动态加载,则当库被加载(其不必是程序时创建的对象卸载库时会被销毁(这不一定是程序退出时).