【发布时间】:2016-02-01 16:56:34
【问题描述】:
我想建立一个设备地图,以便地图包含:
QString 'DeviceID' 和 QVector 'Command List'
目前我的 QMap 如下:
QMap<QString, QVector<QString> *> devices;
QVector<QString> *pCommands= new QVector<QString>;
// :
// Fill pCommands with lots of data here
// :
devices.insert(RadioID, pCommands);
但我想知道这是否真的更好:
QMap<QString, QVector<QString>> devices;
QVector<QString> commands;
// :
// Fill commands with lots of data here
// :
devices.insert(RadioID, commands);
我确信我在某处读到 Qt 在复制数据时会做一些非常有效的事情。我没有看到很多人在 Qt 中使用指针,而且我必须通过 QMap 最后删除所有 QVector 似乎很混乱......
我使用的是 c++11,所以也许某种移动语义可以在这里工作?
编辑 我已经修改了代码中的 cmets 以显示向量不为空。 我还要声明,一旦存储数据,我就不需要更改数据。
【问题讨论】:
-
如果你没有特定的理由使用指针,那么我会避免使用它们。
-
@NathanOliver 试图节省过多的内存 :)
-
除非您共享它们,否则您将消耗内存。如果您要“共享”它们,那么您应该查看一个共享指针来管理指针。
-
@NathanOliver 不清楚 - 但我的意思是在将矢量放入地图之前,它必须充满数据。我已经更新了问题以明确说明:)
-
使用容器的全部原因是它们为你做内存管理。它们旨在将值存储在:您感兴趣的类型的值,而不是指针的值。如果容器应该拥有存储在其中的对象,那么将原始指针存储在容器中总是错误的,除非容器旨在为您管理数据生命周期。 C++ 和 Qt 中的标准容器都没有这样做 - 它们用于存储值,而不是指向值的指针(除非它们不拥有指向的数据)。