객체의 생성을 1개로 제한
어디서든 쉽게 접근 가능
extern 사용 불가
이유:객체를 여러 개 만들수 있음
올바른 방법 :생성자를 숨긴다
객체를 얻을수 있는 함수를 제공하여 어디서든 접근케 한다
그 함수는 객체 하나만 관리한다
(정적 멤버 함수 릴리즈 추가)
static 멤버 함수
객체가 없어도 호출 가능= 누가 호출했는지 알 필요 없다, this가 존재하지 않는다.
따라서 static 멤버만이 멤버 함수에 접근 가능
/*클래스 정적 멤버는 클래스 밖에서 초기화 해줘야 한다,
그리고 그 초기화는 프로그램 시작 할때 한 번만 실행(문법)
함수안의 정적 변수는 그 함수 안에서만 접근 가능.
파일 안의 정적 변수는 그 해당 파일 안에서만 접근 가능.
즉 정적 변수가 어디에서 선언되었는 곳 안에서는 접근이 가능한다
-주소를 받는다면 어디에서나 접근가능, 주소의 특성!!!*/
포인터가 가르키는 주소를 delete해도 포인터가 가르키는 주소는 동일
relase함수에서 해당 주소를 제거한후 갖고있는 포인터
nullptr로 바꾸기 위해선 참조 필요
두 static 함수에서 참조할수 있는 변수는 static변수이다
class CCore
{
private:
static CCore* g_pInst;
public:
static CCore*GetInstance()
{
if(nullptr==g_pInst)
g_pInst=new CCore;
return g_pInst;
}
static void Release()
{
if (nullptr != g_pInst)
{
delete g_pInst;
g_pInst = nullptr;
}
}
(그냥 코어를 데이터 영역에 두고 쓴다. 릴리즈를 따로 하지 않음)
정적 변수를 생성하고 그것의 주소를 반환
class CCore
{
private:
static CCore* g_pInst;
public:
static CCore*GetInstance()
{
static CCore core;
return &core;
}
};