小编oph*_*coe的帖子

使用weak_ptr实现Observer模式

到目前为止我所拥有的是:

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)

c++ observers weak-ptr observer-pattern c++11

7
推荐指数
1
解决办法
1857
查看次数

我的指针导致"同一类型限定符不止一次使用"警告?

根据我对使用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语义的理解是否有缺陷?

c++ pointers const

0
推荐指数
1
解决办法
204
查看次数

标签 统计

c++ ×2

c++11 ×1

const ×1

observer-pattern ×1

observers ×1

pointers ×1

weak-ptr ×1