繁体   English   中英

全局静态变量vs函数中的静态变量?

[英]global static variable vs static variable in function?

使用之间有什么不同:

static Foo foo;
// ...
foo.func();

和:

Foo& GetFoo(void) 
{
    static Foo foo;
    return foo;
}

// ...

GetFoo().func();

哪个更好?

主要区别在于施工时。 在第一种情况下,它发生在main()开始之前的某个时间。 在第二种情况下,它发生在第一次调用GetFoo()

在第一种情况下,有可能在初始化之前(非法地)使用foo 在第二种情况下,这是不可能的。

当您不想要类/对象的副本时,通常使用GetFoo 例如:

class Foo
{
private:
    Foo(){};
    ~Foo();
public:
    static Foo* GetFoo(void) 
    {
        static Foo foo;
        return &foo;
    }

    int singleobject;
};

您可以从外部访问, singleobject通过Foo::GetFoo()->sinlgeobject 私有构造函数和析构函数可以避免您的类创建副本。

对于static Foo foo的使用,您必须声明公共构造函数,这意味着您始终通过它访问您的类,但您的类也将能够获取副本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM