2

有什么办法不允许在友元函数中进行私有构造,以防我们的类中有带友元函数的私有构造函数。只有静态方法应负责对象创建,除此编译器外,应闪烁错误消息

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

}
4

2 回答 2

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;
  }
于 2013-10-24T23:48:30.350 回答
0

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

于 2013-10-24T22:42:54.323 回答