我想为我的项目创建这个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)? –
我不明白我应该在哪里使用它?我正在将它用于模型。 –