加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

可以在类中设置的C只读结构?

发布时间:2020-12-16 10:08:42 所属栏目:百科 来源:网络整理
导读:我有一个类Foo,它在其中定义了一个公共结构数据,具有QVector Data allData在其中嵌套Data结构的多个对象: class Foo{ public: struct Data { uchar valueA; uchar valueB; uchar valueC; }; private: QVectorData allData;}; 我还有另外两个类B和C需要每秒
我有一个类Foo,它在其中定义了一个公共结构数据,具有QVector< Data> allData在其中嵌套Data结构的多个对象:

class Foo
{
    public:
        struct Data {
            uchar valueA;
            uchar valueB;
            uchar valueC;
        };
    private:
        QVector<Data> allData;
};

我还有另外两个类B和C需要每秒多次读取allData.它们根本不能写入allData,这只能由Foo类处理.

考虑到性能,我正在寻找一种方法来做到这一点,而不是每次都创建一个新的QVector.据我了解,这样的方法:

QVector<Data> getAllData() {
    return allData;
}

每次调用此方法时都会导致创建一个新对象.

如果我给其他课程类似于QVector< Data>刚刚移交给Foo的allDataCopy将填充allData内部的值,这些值只会导致每次都必须复制所有值,我想这也不会很好.

有没有有效的方法来解决这个问题?

解决方法

除非您想强制复制用户,否则您的“getter”不应按值返回.提供两个重载,分别返回左值引用和const左值引用(如果不希望Foo的用户改变allData,则只返回const值):

QVector<Data>& getAllData() {
    return allData;
}

const QVector<Data>& getAllData() const {
    return allData;
}

这仍然允许您的用户制作副本(如果需要),但也允许您的用户通过引用观察/改变allData,而无需任何副本.

在C 11及更高版本中,如果QVector支持移动语义,您可能希望在&&和ref限定符也是:

QVector<Data>& getAllData()       &      { return allData; }
const QVector<Data>& getAllData() const& { return allData; }
QVector<Data> getAllData()        &&     { return std::move(allData); }

这允许用户方便地从Foo类型的右值移动allData.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读