Я пытаюсь создать эту структуру MVC для своего проекта. Я использую shared_ptr и weak_ptr в первый раз и получаю много проблем, кроме круговой зависимости.Циркулярная зависимость в MVC std :: 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 секунд она заканчивается без другого выхода.
Контроллер не разрушается. :(
Как я могу решить эту проблему?
Продуманные с помощью [ 'зОго :: weak_ptr'] (http://en.cppreference.com/w/cpp/memory/weak_ptr)? –
Я не понимаю, где его использовать? Я использую его для рассматриваемой модели. –