使用有什么区别:
static Foo foo;
// ...
foo.func();
和:
Foo& GetFoo(void)
{
static Foo foo;
return foo;
}
// ...
GetFoo().func();
哪个更好?
使用有什么区别:
static Foo foo;
// ...
foo.func();
和:
Foo& GetFoo(void)
{
static Foo foo;
return foo;
}
// ...
GetFoo().func();
哪个更好?
主要区别在于施工发生的时间。在第一种情况下,它发生在main()
开始之前的某个时间。在第二种情况下,它发生在第一次调用GetFoo()
.
在第一种情况下,代码可能在foo
其初始化之前(非法)使用。在第二种情况下这是不可能的。
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
,您必须声明公共构造函数,这意味着您始终可以通过它访问您的类,但您的类也可以获取副本。