gpt4 book ai didi

c++ - 非常量复制构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:59 26 4
gpt4 key购买 nike

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

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

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 参数时,我们需要调用非 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,但我认为它不适合那里,因为对象在逻辑上发生了变化。

还有其他想法吗?

最佳答案

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

您的对象在逻辑上仍将保持为 const,因为从用户的角度来看,一切都没有改变。

关于c++ - 非常量复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com