C++ 不允许在友元函数中调用私有构造函数
有没有办法不允许在friend函数中进行私有构造,以防我们的类中有带friend函数的私有构造函数。只有静态方法应该负责对象的创建,而不是这个编译器应该刷新错误消息C++ 不允许在友元函数中调用私有构造函数,c++,constructor,private,friend,C++,Constructor,Private,Friend,有没有办法不允许在friend函数中进行私有构造,以防我们的类中有带friend函数的私有构造函数。只有静态方法应该负责对象的创建,而不是这个编译器应该刷新错误消息 #include <iostream> #include <memory> using namespace std; class a { public: void see () { cout<<"Motimaa"; } static a& g
#include <iostream>
#include <memory>
using namespace std;
class a
{
public:
void see ()
{
cout<<"Motimaa";
}
static a& getinstance()
{
static a instance;
return instance;
}
private:
a() {};
friend void access();
};
void access ()
{
a obj;
obj.see();//still friend function can access
}
int main()
{
a::getinstance().see();
access();
return 1;
}
#包括
#包括
使用名称空间std;
甲级
{
公众:
请参见()
{
cout友元函数可以访问befriended类的所有成员。友元函数可以访问所有私有成员和变量,但如果您试图显式停止意外使用默认构造函数,则有可能解决您的问题
您可能会使默认构造函数终止程序。现在,创建至少接受一个参数的第二个构造函数,即使它是一个无意义的参数
下面是一个例子:
private:
a() { cerr<<"Invalid call to constructor for object a!"; exit(); };
a(bool dummyArg) {}
public:
static a& getInstance() {
static a instance(true);
return a;
}
private:
(){cerrNo.当你把它作为朋友时,你认为这个函数做的是正确的。它可以在你的私有变量上乱涂乱画;如果你不信任它的实现,那么通过私有构造函数创建对象应该是你最不担心的事了。不允许朋友函数通过你的使用默认构造函数。但仍然可以调用友元函数:obj(true);