7

使用有什么区别:

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

和:

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

// ...

GetFoo().func();

哪个更好?

4

2 回答 2

10

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

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

于 2012-08-30T00:44:13.527 回答
1

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

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

    int singleobject;
};

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

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

于 2012-08-30T01:04:16.387 回答