솔직히 말해서 묻고 싶은 몇 가지 질문이 있지만 질문을 하나만 사용합니다.정적 함수와 정적 포인터의 차이점은 무엇입니까
정적 함수는 외부에서 클래스 개체를 만들지 않고도 액세스 할 수 있으므로이 함수는 프로그램 초기화시 만들어진 기본 복사본에있는 것으로 가정합니다. 클래스가 일반적으로 일회용 전용 생성자를 가지고 있고 알려진 메서드 GetInstance
이 사용되면 포인터가 가리킬 정적 변수의 주소가 반환됩니다. 문제는 GetInstance
번으로 여러 번 호출 할 수 있지만 포인터가 가리키는 주소가 항상 같은 이유입니다. 왜 이것이 발생하고 두 번째 이유는 무엇이며 그 차이점은 무엇이며 직접 정적 함수입니까? 나는 GetInstance
에 대해서 알고있다. "COPY"가 만들어 졌기 때문에 (위의 질문 참조) 함수 StoreB
에 this
포인터가 있기 때문에 정적 함수에 왜 this
이 없는지 알 수 있었기 때문에 storage
벡터에 액세스 할 수있다. 포인터가 생성되지 않으므로?
class store
{
private:
store(){};
~store(){};
std::vector<int>storage;
public:
static void Store(int a);
void StoreB(int a);
static store* GetInstance()
{
static store obj;
return& obj;
}
};
void store::StoreB(int a)
{
storage.push_back(a);
}
void store::Store(int a)
{
//storage.push_back(a); //can't
}
int _tmain(int argc, _TCHAR* argv[])
{
store::Store(2);
store::GetInstance()->Store(3 );
store *a = store::GetInstance();
store *b = store::GetInstance();
cout << a << endl //points to the same address
<< b << endl; //points to the same address
}
'GetInstance'는 오직 하나의 객체 만 갖기 위해 사용됩니다. 그 클래스를 구현하는 클래스는 일반적으로 싱글 톤입니다. – chris