【发布时间】:2020-07-18 17:03:14
【问题描述】:
我有一个 C++ sn-p,如下所示。 “getInstance()”函数试图返回同一类“CAbc”的静态对象。这个类有一个私有构造函数,所以这个类的对象不能被创建。
在 main() 中调用此函数时,就像在下面的 sn-p 中一样,返回的对象不会使用任何引用在 main() 中的任何地方收集。
我试图理解以下两点:
-
这种创建静态对象并将其返回的方式是什么 在同一类类型的静态成员函数中?没有 当构造函数是私有的时创建的对象。那么这个怎么做 对象返回工作?
-
这种不在 main() 中收集对象的方法是如何工作的?
这是在 main() 函数中调用的。
class CAbc
{
private:
CAbc() {} // HAS A PRIVATE CONSTRUCTOR
.....
public:
static CAbc& getInstance()
{
static CAbc _self;
return _self;
}
// what does this returning a static self object mean in C++ ?
}
main()
{
CAbc::getInstance();
// not collectig this anywhere ?
}
【问题讨论】:
-
This class has a private constructor so that objects of this class can't be created.和There is no object created when a constructor is private.:这是错误的。类本身(或类的方法)可以调用私有方法,这意味着静态类方法可以(并且确实)创建类的实例。 -
getInstance没有返回对象,而是返回了对该对象的引用。 -
对于您的其他问题,不“收集”返回值并不是错误。没有什么可做的,返回的值(或引用)只是被扔掉了。你可能会问重点是什么,但这是一个不同的问题。
-
仅供参考,您所拥有的称为Meyer's singleton
标签: c++ static singleton static-members static-functions