到目前为止我所拥有的是:
Observer.h
class Observer
{
public:
~Observer();
virtual void Notify() = 0;
protected:
Observer();
};
class Observable
{
public:
~Observable();
void Subscribe( std::shared_ptr<Observer> observer );
void Unsubscribe( std::shared_ptr<Observer> observer );
void Notify();
protected:
Observable();
private:
std::vector<std::weak_ptr<Observer>> observers;
};
Run Code Online (Sandbox Code Playgroud)
Observer.cpp
void Observable::Subscribe( std::shared_ptr<Observer> observer )
{
observers.push_back( observer );
}
void Observable::Unsubscribe( std::shared_ptr<Observer> observer )
{
???
}
void Observable::Notify()
{
for ( auto wptr : observers )
{
if ( !wptr.expired() )
{
auto observer = wptr.lock();
observer->Notify();
}
} …Run Code Online (Sandbox Code Playgroud) 根据我对使用const类型限定符和指针的理解,它取决于你使用它的位置.
const MyType *
Run Code Online (Sandbox Code Playgroud)
意味着该位置无法修改,但该位置的值可以.
MyType const *
Run Code Online (Sandbox Code Playgroud)
意味着可以修改位置,但不能修改位置的值.
由此,我认为没有理由不能使以下内容无效,
const MyType const *
Run Code Online (Sandbox Code Playgroud)
定义一个位置固定的指针,并且无法修改指向的值.但是,这就是"不止一次使用相同类型的限定符".我应该忽略这个吗?我对指针上下文中const语义的理解是否有缺陷?