繁体   English   中英

禁止在好友函数中调用私有构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM