어떤 사람은이 패턴에 대한 질문을 게시하지만, 위의 예 만약에 내가 가지고있는 쿼리를 게시 내 마음에서 제기 된 문제의 해결책 ...혼란 ++
을 가지고 있지 모든 인스턴스는 s_prototypes 변수에 의해 초기화되고 다음 번에 그 객체가 복제 메소드의 새 객체로 대체되면 기존 객체는 어떻게됩니까 ?? 메모리 누수가 발생합니까 ??
지금까지 내가 예를 들어 두 개의 문 위의 이해 나에게
class Stooge {
public:
virtual Stooge* clone() = 0;
virtual void slap_stick() = 0;
};
class Factory {
public:
static Stooge* make_stooge(int choice);
private:
static Stooge* s_prototypes[4];
};
int main() {
vector roles;
int choice;
while (true) {
cout << "Larry(1) Moe(2) Curly(3) Go(0): ";
cin >> choice;
if (choice == 0)
break;
roles.push_back(
Factory::make_stooge(choice));
}
for (int i=0; i < roles.size(); ++i)
roles[i]->slap_stick();
for (int i=0; i < roles.size(); ++i)
delete roles[i];
}
class Larry : public Stooge {
public:
Stooge* clone() { return new Larry; }
void slap_stick() {
cout << "Larry: poke eyes\n"; }
};
class Moe : public Stooge {
public:
Stooge* clone() { return new Moe; }
void slap_stick() {
cout << "Moe: slap head\n"; }
};
class Curly : public Stooge {
public:
Stooge* clone() { return new Curly; }
void slap_stick() {
cout << "Curly: suffer abuse\n"; }
};
Stooge* Factory::s_prototypes[] = {
0, new Larry, new Moe, new Curly
};
Stooge* Factory::make_stooge(int choice) {
return s_prototypes[choice]->clone();
}
Output
Larry(1) Moe(2) Curly(3) Go(0): 2
Larry(1) Moe(2) Curly(3) Go(0): 1
Larry(1) Moe(2) Curly(3) Go(0): 3
Larry(1) Moe(2) Curly(3) Go(0): 0
Moe: slap head
Larry: poke eyes
Curly: suffer abuse
을 혼동하지만 우리는 make_stooge 방법으로 clone 메소드를 호출 할 때 새로운 객체를 반환하고 기존 하나를 교체하는 경우는, 새로운 객체를 반환으로 다음 기존 개체가 여기에 메모리 누수를 만듭니다가
- 즉 귀하의 게시 된 코드에서 일어나고 아니에요. –