繁体   English   中英

非常量复制构造函数

[英]Non-const copy constructor

我正在对对象进行写优化的复制(即,在调用复制构造函数时,只需保存指向对象的指针,并且仅在我们需要更改对象或指向要更改的对象时才真正复制它)。

在改变我们的对象之前,我们需要通知其他人,这样他们才能进行真正的应对。 对于这个动作,我决定使用观察者模式:

struct subject {
    void register_observer(const event& e, observer& obs);
    void notify(const event& e) const;

private:
    std::map<event, std::vector<observer*> > _observers;
};

对于观察员:

struct observer {
    virtual void onEvent(event e);
};

然后,我们的对象继承了它们。 问题是,在复制构造函数中,当我们获取 const 参数时,我们需要调用 register_observer,这是非常量方法:

my_class::my_class(my_class const &other) {
    if (other._copy != NULL) this->_copy = &other;
    else {
        this->_copy = other._copy;
        this->_copy->register_observer(event::CHANGED, *this);
    }
}

我发现的一种可能的解决方案是使用mutable ,但我认为它不适合那里,因为 object 在逻辑上发生了变化。

还有其他想法吗?

在您的情况下,您可能应该使用mutable关键字。

您的对象在逻辑上仍将保持不变,因为从用户的角度来看,没有任何变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM