대가리 먼저 디자인패턴을 보고 있습니다. 그런데 자바는 메모리를 해제하는 개념이 없어서 책에 아나와 있더군요.
그래서 걍 제 마음대로 설정을 하고 해제를 하곤 합니다만... 이게 맞는지 모르겠습니다.

일단 소스 한번(...)
// 중간의 fly와 Quack에 대한 클래스의 상태는 생략합니다.
// 최상위 클래스인 Duck만 봐도 책 보신 분들이나 잘 아시는 분은 이해가 되실 듯.

class Duck {
protected:
        FlyBehavior* fly;
        QuackBehavior* quack;
public:
        void SetQuack(QuackBehavior *Other) { quack = Other;}
        void SetFly(FlyBehavior *Other) { fly = Other; }
        void GetDuckState() {
                quack->Quack();
                fly->Fly();
        }
        ~Duck() {             ///문제는 바로 요 부분. 메모리를 설정한 곳을 해제를 여기서 했습니다만... 이게 해제가 잘 됬는지 의문이네요. virtual 형식으로 선언을 하면 Duck을 상속한 클래스들도 한 번씩 돌아보는 것 같던데요.. 이 부분이 맞나 함 여쭤봅니다.
                cout << "메모리를 해제합니다" << endl;
                delete fly;
                delete quack;
        }
};

class RubberDuck : public Duck {
public:
        RubberDuck() { fly = new NoWing(); quack = new NoQuack(); }
        ~RubberDuck() { cout << "고무오리 지워야 해요" << endl; }            ///이 부분이 안 뜨는 것을 보니 정답인 것 같기도 하고요=_=
};

class RedHeadDuck : public Duck {
public:
        RedHeadDuck() { fly = new Wing(); quack = new MouthQuack(); }
        ~RedHeadDuck() { cout << "빨간오리 지워야 해요" << endl; }
};

void main()
{
        Duck *rubberduck = new RubberDuck();
        rubberduck->GetDuckState();
        delete rubberduck;
}

--------------------------------------
여담이지만 요즘들어 언어 공부가 너무 즐겁습니다. 즐거워 미칠지경입니다-ㅁ-;;; 바람직한 현상이라 생각하면서 오늘도 머리를 싸매고 있습니다. 넵.