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

时间:2013-10-24 21:37:38

标签: c++ constructor private friend

有没有办法在朋友功能中不允许私人建设,如果我们在班上有私人建设者和朋友功能。只有Static方法应该负责创建对象,而不是此编译器应该闪烁错误消息

#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;

}

2 个答案:

答案 0 :(得分:1)

朋友函数可以访问所有私有成员和变量,但是对于您的问题有一个潜在的解决方法,假设您试图明确地停止意外使用默认构造函数。

您可能会使默认构造函数终止该程序。现在,创建第二个构造函数,该构造函数至少接受一个参数,即使它是一个毫无意义的参数。

以下是一个例子:

private:
  a() { cerr<<"Invalid call to constructor for object a!"; exit(); };
  a(bool dummyArg) {}

public:
  static a& getInstance() {
    static a instance(true);
    return a;
  }

答案 1 :(得分:0)

朋友功能可以访问所有朋友的成员。