可以在类中设置的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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容