c++ - friend 类可以在 C++ 中调用私有(private)构造函数吗? (什么是单例)

标签 c++ private-constructor friend-class

考虑 A 类和 B 类。A 类是 B 类的 friend 。B 类有一个私有(private)构造函数。类 A 可以创建类 B 的实例,或者私有(private)构造函数是否向编译器指示该类不能被实例化,即使是友元类?
下面是一些示例代码:

class B;

class A {
    void myFunction() {
        B newBobject;
    }
};

class B {
    private:
        B() {}
    public:
        int someData;
        friend class A;
};

另外,请注意我使用的是 C++03。如果它在 C++03 中无效,那么在 C++11 中是否允许它?

作为附带问题,Singleton 方法是如何关联的?它是专门处理对象的一个​​且仅一个实例的实例化,还是其他事情?

最佳答案

您的代码(更像是您的想法)实际上没有错误并且在 C++03 上都有效和 c++11 .

但是您的代码中有 2 个错误。要创建类型 B 的对象,您需要查看 B 的整个定义,这意味着需要交换 B 和 A 的定义。

其次,您需要将myfunction 公开,或者从类A 中调用它。

回答你的另一个问题..大多数单例都是这样实现的..

class Singleton{
private:

   Singleton(){}
public:
   static Singleton& GetInstance(){
       static Singleton instance;
       return instance;
   }
};

这将阻止除 Singleton 类(以及您发现的一个 friend )之外的任何人创建该类的实例,因此更容易执行 1 个对象规则。 Singleton 将作为 Singleton::GetInstance() 访问。

这个和其他可能的实现显示在 Wikipedia .

关于c++ - friend 类可以在 C++ 中调用私有(private)构造函数吗? (什么是单例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14226911/

相关文章:

c++ - 如何更改已映射和已提交内存空间的权限?

c++ - Qt moc 失败且没有错误消息

c++ - 使用 GMOCK 模拟具有私有(private)构造函数的类

c++ - 具有前向类声明的 friend 类无法编译

c++ - 菜单项在 gtkmm3 中总是被禁用

c++ - 第一个元素在插入排序期间未排序

c++ - 不可能从这个对象继承?

c# - 静态类 VS 私有(private)构造函数

c++ - 复制和移动构造函数是自动的 friend 吗?