[英]Disallow private constructor invocation in friend function
有什么方法可以不允许在朋友函数中进行私有构造,以防万一我们的类中确实有带有朋友函数的私有构造函数。 只有静态方法才应负责对象的创建,除此编译器以外,还应刷新错误消息
#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;
}
Friend函数可以访问所有私有成员和变量,但是,如果您试图显式停止意外使用默认构造函数,则可以解决该问题。
您可能使默认构造函数杀死程序。 现在,创建第二个构造函数,该构造函数至少接受一个参数,即使它是无意义的参数也是如此。
这是一个例子:
private:
a() { cerr<<"Invalid call to constructor for object a!"; exit(); };
a(bool dummyArg) {}
public:
static a& getInstance() {
static a instance(true);
return a;
}
朋友功能可以访问该伙伴班的所有成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.