使用私有构造函数在静态方法中创建对象

creating objects in static methods with private constructors

本文关键字:静态方法 创建对象 构造函数      更新时间:2023-10-16
#include<iostream>
using namespace std;
struct A {
    static A& create(int i)
    {
        A a(i);
        return a; // Ignore this problem.
    }
    void print() { cout<< _a <<endl; }
private:
    A(int i):_a(i){}
    int _a;
};
int main()
{
    A& a = A::create(2);
    a.print();
    return 0;
}

我不明白的事情很少:

  • 由于静态方法与特定实例无关,所以它不相关理解如何创建一个有private的A对象构造函数。
  • 静态方法只能使用静态变量和静态方法。一边事实上,它是私有的,构造函数(它是一个吗隐式静态?)可以调用?

由于静态方法与特定实例无关,我不明白如何创建具有私有构造函数的a对象。

在类定义中的静态方法

可以访问私有构造函数。如果您的示例:

static A& create(int i)
{
    A a(i);
    return a; // Ignore this problem.
}

你正在返回对局部变量的引用,这是UB(这是你上面评论的原因吗?)。也许你指的是static A create(int i)std::unique_ptr:

static std::unique_ptr<A> create(int i) {
    return std::unique_ptr<A>(new A(num));
} 

或单例(但name create()表明它是工厂方法):

static A& create(int i)
{
    static A a(i);
    return a; // Ignore this problem.
}

静态方法只能使用静态变量和静态方法。除了它是私有的事实之外,构造函数(它是隐式静态的吗?)是如何被调用的?

正如我上面所说的,你的静态方法可以访问你的类的私有方法。构造函数被调用是因为你在堆栈上创建了局部变量,这是合法的