C++ 构造函数为private的情况

         在C++中,如果一个类的构造函数被声明为private,那么直接在该类外部创建该类型的对象(包括栈对象和堆对象)是不允许的,因为外部代码无法访问私有构造函数。

但仍有几种特殊情况可以间接创建该类的实例:

1、直接创建对象(不允许)

2、允许创建对象的特殊情况

        a)、类内部成员函数可以创建对象。类的成员函数(包括静态成员函数)可以访问私有构造函数

        b)、友元(friend)函数可以创建对象。被声明为friend的函数或类可以访问私有构造函数。

        c)、嵌套类可以访问私有构造函数。如果另一个类是当前类的嵌套类(定义在类内部的类),它可以访问私有构造函数。

3、设计模式中的应用

  • 单例模式(Singleton):通过私有构造函数+静态方法控制唯一实例。
class Singleton {
private:
    Singleton() {} // 私有构造函数

public:
    static Singleton& getInstance() { // 静态方法返回唯一实例
        static Singleton instance; // 局部静态变量(线程安全,C++11 起)
        return instance;
    }

    // 删除拷贝构造函数和赋值运算符,防止复制
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
};

int main() {
    Singleton& obj = Singleton::getInstance(); // 获取唯一实例
    return 0;
}
  • 工厂模式(Factory Pattern):通过私有构造函数+工厂方法控制对象创建。
class Product {
private:
    Product() {} // 私有构造函数

public:
    static Product create() { // 工厂方法
        return Product();
    }
};

int main() {
    Product p = Product::create(); // 通过工厂方法创建对象
    return 0;
}

        私有构造函数的主要目的是限制对象的创建方式,强制使用特定的方法(如工厂方法或单例模式)来创建对象。这是一种常见的封装技术,用于实现不可复制类、单例模式或对象池等设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值