在列表中存储场景的图形项目是一种很好的做法吗?
我知道QGraphicsItem
具有虚方法int type()
,您可以按类型动态查找项目。所以我的意思是我想将我的图形项目存储在不同的列表中。
class Scene : public QGraphicsScene
{
public:
// Constructors etc.
private:
// Store graphic items in lists by value
QList<Carrot> m_carrots;
QList<Apple> m_apples;
};
这可能听起来很愚蠢,但我在当前项目中的主要问题是使用指针绑定所有内容,有时会出现分段错误。并使用
删除项目delete item;
item = nullptr;
我想用let {#1}}来管理项目 问题是我还不知道它可能导致什么,项目也非常庞大,所以这些变化会影响其他代码并花费大量时间。但我认为它可能有助于管理更安全的内存方式。 提前致谢
答案 0 :(得分:0)
如果按值存储项目,则必须将它们视为值,并让容器管理内存。关于此类项目的明确delete
是一个错误。 Qt的项目类不可复制 - 因此您可以:
使派生类可复制,因为QList
必须复制。
使用std::list
,因为它不需要复制。
使用唯一指针的矢量,例如std::vector<std::unique_ptr>
。