如何在qt容器中存储qt容器
How to store qt containers inside qt containers
我理解得对吗
QVector<QSharedPointer<QVariantHash>>
而且我只能坚持:
QVector<QVariantHash>
由于隐式共享?
老实说,使用 STL,我永远不会这样做并且会 std::vector<std::shared_ptr<std::unordered_map<...>>>
。
更新:
我的问题是关于性能的。我知道这是存储对象的不同方式。
不,它们有不同的行为。
QVector<QVariantHash>
仍然是 copy-on-write,因此向量的副本仅共享直到第一次修改的元素,而只要您不理会指针,QVariantHash
s pointed-to QVector<QSharedPointer<QVariantHash>>
的元素仍然是相同的对象。
顺便说一句,我会避免依赖隐式共享,因为它真的很容易陷入未定义的行为,指针或引用从你下面失效。
我还要提醒不要过度使用共享指针。几乎总是你可以拥有一件具有独特所有权的东西,它会分发参考资料。
我理解得对吗
QVector<QSharedPointer<QVariantHash>>
而且我只能坚持:
QVector<QVariantHash>
由于隐式共享?
老实说,使用 STL,我永远不会这样做并且会 std::vector<std::shared_ptr<std::unordered_map<...>>>
。
更新:
我的问题是关于性能的。我知道这是存储对象的不同方式。
不,它们有不同的行为。
QVector<QVariantHash>
仍然是 copy-on-write,因此向量的副本仅共享直到第一次修改的元素,而只要您不理会指针,QVariantHash
s pointed-to QVector<QSharedPointer<QVariantHash>>
的元素仍然是相同的对象。
顺便说一句,我会避免依赖隐式共享,因为它真的很容易陷入未定义的行为,指针或引用从你下面失效。
我还要提醒不要过度使用共享指针。几乎总是你可以拥有一件具有独特所有权的东西,它会分发参考资料。