단일 모드 "유일 하지 않 음"
5917 단어 디자인 모드
class Single
{
private:
static Single sig;
Single();
Single(const Single&);
//.....
public
static Single& Get()
{
return sig;
}
};
결말 을 맞 혀 보 세 요. 맞아요. 프로그램 이 Single: Get () 을 호출 할 때 오류 가 발생 했 습 니 다. 오류 원인, 복사 구조 함 수 는 개인 적 인 것 입 니 다.이 유 는 다음 과 같 습 니 다. 프로그램 이 실제 호출 할 때 이미 존재 하 는 대상 sig 로 Get () 을 구조 적 으로 호출 하 는 대상 입 니 다. 즉, 구조 함 수 를 복사 하려 면 Public 이 어야 합 니 다.새로운 문제 가 또 발생 했다. 앞에서 언급 한 '복사 구조 함수' 는 새로운 대상 을 만 드 는 데 쓰 인 다. 단일 모드 로 만 든 대상 이 유일 하지 않다 는 것 이 아니 겠 는가?bingo, 맞 혔 습 니 다. 단일 모드 로 만 든 대상 은 유일한 것 이 아 닙 니 다.블 로 거들 은 의 심 스 러 운 태 도 를 가지 고 항소 사례 모델 에 이런 구성원 방법 을 추가 했다.
void Show_add()const
{
cout<<"& Single :"<cout<<"this :"<<this<
의심 할 필요 가 없습니다. 이것 은 class Single 의 한 Public 의 구성원 입 니 다. 현재 대상 의 주소 와 유일한 대상 의 주 소 를 직접 출력 하면 구분 할 수 있 습 니 다. 이른바 '유일한 대상' 이 유일 합 니까?하, 결 과 는 정말 내 가 알 아 맞 혔 다. 두 주소 의 차 이 는 십 만 팔 천 리 였 다. 즉, 대상 이 유일한 것 이 아니 었 다.저 는 이 결 과 를 정말 믿 지 않 습 니 다. 그래서 이 Singleton 의 유형 에 멤버 와 멤버 방법 을 추가 하여 테스트 를 했 습 니 다. 다음 과 같 습 니 다.
class Single
{
private:
static Single sig;
static int a; // 10
int b; // 100
const char *str; // "abcdefg"
Single();
public
single(const single&);
static Single& Get();
void Show()const; //
void Show_add()const; // sig
void Add(int num) // static +
{
a += num;
b += num;
}
};
유형 방법의 실현 은 더 이상 말 하지 않 겠 습 니 다. 그 테스트 부분 은 다음 과 같 습 니 다.
Single s1 = Single::Get();
Single s2 = Single::Get();
s1.Add(10); // s1 a b 10
s1.Show(); // s1
s2.Show(); // s2
s1.Show_add(); // s1 sig
s2.Show_add(); // s2 sig
결 과 는 다음 과 같 습 니 다. 독자 의 읽 기 편 의 를 위해 저 는 s1 대상 의 s2 대상 의 각 출력 을 수 동 으로 나 누 었 습 니 다.
s1:: a :20
b :110
str :abcdefg
s2:: a :20
b :100
str :abcdefg
s1:: & Single :00E80218
this :00FCFAA8
s2:: & Single :00E80218
this :00FCFA98
위 에서 알 수 있 듯 이 1. 단일 모델 의 등장 대상 은 유일한 것 이 아니다. /유일한 대상 sig 에 게 서 복사 구 조 를 통 해 얻 은 후에 원래 의 대상 과 아무런 관계 가 없다.
그러면 새로운 문제 가 생 겼 습 니 다. '단일 예' 를 어떻게 실현 합 니까? (같은 메모리 조작) 정 답 은 모든 구성원 (변수) 을 static 로 쓰 면 Get () 방법 으로 얻 은 모든 대상 이 호출 하 는 모든 방법 은 static 구성원 에 대한 조작 입 니 다. 하하, 다 중 스 레 드 에서 의 안전 통 제 를 기억 하 세 요.
블 로 거들 도 궁금 하 다. 그러면 '유일한 대상' 을 이 룰 수 없다. 그러면 우리 가 평소에 말 하 는 '단일 모드' (모든 멤버 변 수 는 static) 의 크기 는 얼마 일 까? 답 은 1 이다. 그래, 그 는 빈 클래스 다. 우리 가 실현 하 는 모든 방법 은 외부 에 함수 인 터 페 이 스 를 제공 할 뿐 외부 에 보이 지 않 는 다 (private 멤버).의 변수 가 제공 하 는 조작 방식
요약: 단일 대상 이 유일 하지 않 습 니 다. 단일 모델 은 빈 클래스 이 고 크기 (sizeof) 는 1 입 니 다. sizeof 가 1 이 아 닌 클래스 를 구 하 는 것 은 단일 모델 이 아 닙 니 다. 그러나 크기 가 1 인 클래스 는 반드시 단일 모델 이 아 닙 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.