【问题标题】:global static variable vs static variable in function?函数中的全局静态变量与静态变量?
【发布时间】:2012-08-30 00:41:50
【问题描述】:

使用有什么区别:

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

还有:

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

// ...

GetFoo().func();

哪个更好?

【问题讨论】:

标签: c++


【解决方案1】:

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

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

【讨论】:

  • 虽然意图是正确的,但通过对函数的递归调用,您可以在初始化之前使用静态函数(在 C++03 中)。
【解决方案2】:

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

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

    int singleobject;
};

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-12
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 2022-01-28
    相关资源
    最近更新 更多