标题基本上说明了一切,我想知道 C++ 类的静态成员何时初始化以及何时超出范围。
我需要这个来解决以下问题。我有一个类 Foo 的许多对象,每个对象都需要访问一个资源,由另一个类 Bar 封装。同步不是问题,所以我希望所有对象共享同一个 Bar 实例。
我正在使用一个简单的托管指针进行引用计数。
我可以做以下事情吗:
class Foo {
private:
static managed_pointer<Bar> staticBar;
public:
Foo() {
if(!staticBar)
staticBar = new Bar;
}
/*
* use staticBar in various non-static member functions
*/
};
managed_pointer<Bar> Foo::staticBar = NULL;
managed_pointer staticBar 应该在 Bar 对象超出范围时立即删除它 - 但这是什么时候发生的? Foo 的最后一个实例何时被破坏?在应用程序退出时?
感谢您的建议!
最佳答案
static
和全局变量在程序开始之前初始化(在 main
被调用之前,程序实际上在此之前开始)并在 之后超出范围main
退出。
异常 - 局部静态(在函数内部声明的静态变量)和未使用的模板类 static
成员。
与实例数无关
关于C++ 静态成员变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11330021/