C++ 静态成员变量作用域

标签 c++ scope static-members

标题基本上说明了一切,我想知道 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/

相关文章:

c++ - _splitpath_s : wrong argument type?

c++ - 在 ID3DBlob 中初始化 PS 的 DirectX11 CreatePixelShader 中出现访问冲突

javascript - 为什么我不能在闭包中访问局部变量

php - 如何访问类对象中的数组值?

java - 从自定义 onClickListener 类调用 Activity 方法

c++ - 如何构建 Boost::program_options(在 Linux 上)

c++ - 奇怪的 C++ 语法 : type definition before a function call

C++ 静态常量成员覆盖

c# - .NET 应用程序中 'reset' 所有静态变量的最佳方法

Java:类问题