【发布时间】:2018-06-27 17:28:30
【问题描述】:
我有一个类Foo,它在其中定义了一个公共结构Data,其中一个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> allDataCopy 的东西,它刚刚被移交给 Foo 以填充 allData 中的值,这只会导致每次都必须复制所有值,我想象也不会很好。
有没有什么有效的方法来解决这个问题?
【问题讨论】:
-
QVector是 cheap to copy。也就是说,你可以做到const QVector<Data>& getAllData() -
您可以通过 const 引用返回,因为该值是成员变量,但我不确定这是否安全。
-
“每秒多次”:请给出我们所说的“多次”的顺序。单位?十?数百?百万?
-
为什么使用 QVector 而不是 std::vector?
-
@manni66:我在想这可能是一个问题本身的基础。结果是there is one。
标签: c++ performance struct qvector