C ++:静态成员函数为带有私有构造函数的类返回自静态对象

时间:2020-07-18 17:03:14

标签: c++ static singleton static-members static-functions

我有一个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>

1 个答案:

答案 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

一旦创建,该函数将始终返回相同的对象。