아래 코드는 기본적으로 클래스 생성자를 private로 설정하고 하나의 정적 공용 함수를 제공하여 클래스를 생성하는 싱글 톤 클래스의 예제입니다. 필요한 경우 클래스의 인스턴스.정적 함수가 클래스의 private 멤버 함수 (생성자)에 액세스하는 방법
제 질문은 new
연산자를 사용하여 static 함수 내에 싱글 톤 클래스의 객체를 생성 할 때 클래스의 생성자가 반드시 호출됩니다. 정적 함수는 정적 멤버와 클래스의 정적 함수에만 액세스 할 수 있기 때문에 어떻게되는지 혼란 스럽습니다. 그렇다면 어떻게하면 클래스의 private 함수 (생성자)에 액세스 할 수 있습니까?
정적 함수는 인스턴스를 만들지 않고 클래스의 private 또는 public 멤버 함수를 호출 할 수 있습니까? 나는 아래 샘플 코드를 쓸 때
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton *getInstance();
private:
Singleton(){}
static Singleton* instance;
};
Singleton* Singleton::instance = 0;
Singleton* Singleton::getInstance()
{
if(!instance) {
instance = new Singleton(); //private ctor will be called
cout << "getInstance(): First instance\n";
return instance;
}
else {
cout << "getInstance(): previous instance\n";
return instance;
}
}
int main()
{
Singleton *s1 = Singleton::getInstance();
Singleton *s2 = Singleton::getInstance();
return 0;
}
는 그러나 우리가 정적 대중과 클래스의 민간 기능에 액세스 할 수 있으면
file.cpp: In static member function ‘static void Sample::statFunc()’:
file.cpp:61: error: cannot call member function ‘void Sample::testFunc()’ without object.
:
class Sample
{
private:
void testFunc()
{
std::cout << "Inside private function" <<std::endl;
}
public:
static void statFunc()
{
std::cout << "Inside static function" <<std::endl;
testFunc();
}
};
int main()
{
Sample::statFunc();
return 0;
}
을 나는 ++ g와 컴파일 오류 기능을 누른 다음 왜이 오류가 발생합니까?
짧은 답변 : IMHO 예. 그리고 IMHO 코드에는 아무런 문제가 없습니다. 'getInstance'는'Singleton' 클래스의 멤버입니다. 따라서 클래스의 모든 메소드를 호출 할 수 있습니다. 심지어 private 메소드도 호출 할 수 있습니다. –