我有一个C ++代码段,如下所示。 “ getInstance()”函数正在尝试返回相同类“ CAbc”的静态对象。此类具有私有构造函数,因此无法创建此类的对象。
在main()中调用此函数时,就像下面的代码片段一样,返回的对象不会使用任何引用收集在main()中的任何地方。
我试图理解以下两点:
创建静态对象并从中返回它的这种方式是什么 在相同类类型的静态成员函数中?没有 当构造函数为私有时创建的对象。那怎么办 对象返回工作在这里?
这种不收集main()中的对象的方式如何工作?
这在main()函数中被调用。
<table>
<tr>
<td>
<div class="form-control a">abc 1</div>
</td>
<td>
<div class="form-control b">abc 2</div>
</td>
</table>
答案 0 :(得分:1)
正如@tkausi所说,静态成员函数可以创建一个对象,因为它是成员(因此可以访问私有方法)。
此代码的作用是拥有一个类的实例,只有一个对象(_self
),然后将其返回使用。
为什么没有人获得返回值?因为那里只有该调用才能创建实例。如果不调用该函数,则不会创建_self
对象。
class CAbc
{
private:
CAbc() { cout << "creating" << endl; }
public:
static CAbc& getInstance()
{
static CAbc _self;
return _self;
}
};
int main() {
cout << "Begin" << endl;
//CAbc::getInstance();
}
对getInstance
的调用已被注释掉,您将看不到“正在创建”的输出。
如果取消注释通话,您将看到:
Begin
creating
一旦创建,该函数将始终返回相同的对象。