gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:57:45 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com