내 MVC 구조를 만들려고합니다. 나는 처음으로 shared_ptr과 weak_ptr을 사용하고 있으며 순환 종속성 외에도 많은 문제점을 가지고있다.MVC에서 순환 종속성 :: shared_ptr
모델은 관찰 가능합니다. 보기는 옵저버입니다.
class Observable
{
std::set< std::shared_ptr<Observer> > observers;
public:
Observable(void);
void registerObserver(std::shared_ptr<Observer> );
void removeObserver(std::shared_ptr<Observer> &);
void notifyObservers(void);
virtual ~Observable(void);
};
class Observer
{
public:
Observer(void);
virtual void update() = 0;
virtual ~Observer(void);
};
class Model : public Observable
{
public:
Model(void);
void internalStateChange();
void funcForController();
int getSomethingForView() const;
~Model(void);
};
class View :
public Observer
{
std::weak_ptr<Model> model;
std::shared_ptr<Controller> controller;
public:
View(const std::shared_ptr<Model> &, const std::shared_ptr<Controller> &);
void update() override;
~View(void);
};
class Controller
{
std::shared_ptr<Model> model;
std::shared_ptr<View> view;
public:
Controller(std::shared_ptr<Model> &);
void changeHappened() const;
~Controller(void);
};
내 출력은 다음과 같습니다
이 어딘가에 다음은 다른 출력 종료 50초 같은 후 걸려 보여줍니다.
컨트롤러가 파괴되지 않습니다. :(
어떻게?
에서 당신이 가지고있는 모든 참조 사이클 같은 applyies ['표준을 :: weak_ptr'] (http://en.cppreference.com/w/cpp/memory/weak_ptr)? –
어디에서 사용해야합니까? 보기에 모델 용으로 사용하고 있습니다. –