考虑 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/