1

考虑 A 类和 B 类。A 类与 B 类友好。B 类有一个私有构造函数。A类可以创建B类实例,还是私有构造函数向编译器指示该类不能被实例化,即使是朋友类?
这是一些示例代码:

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 方法是如何相关的?它是否专门处理实例化一个对象的一个​​且仅一个实例,还是其他什么?

4

1 回答 1

3

您的代码(更像您的想法)实际上在C++03c++11上均无错误且有效。

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

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

回答你的其他问题..大多数单例都是这样实现的..

class Singleton{
private:

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

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

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

于 2013-01-09T01:26:40.237 回答