Это хорошая практика для хранения графических элементов сцены в списках?
я знаю это 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;
И я хочу управлять элементами, просто используя, скажем, m_apples.removeAt(index).
Проблема в том, что я пока не знаю, к чему это может привести, так как проект довольно большой, поэтому эти изменения могут повлиять на другие части кода и занять много времени. Но я думаю, что это может помочь в управлении памятью более безопасным способом.
заранее спасибо
Если вы храните элементы по значению, вы должны рассматривать их как значения и позволить контейнеру управлять памятью. Явный delete
на таком предмете есть баг. Классы элементов Qt не копируются, поэтому вы можете:
Сделайте производные классы копируемыми как QList
должен скопировать.
использование std::list
поскольку это не должно копировать.
Используйте вектор уникальных указателей, например, std::vector<std::unique_ptr>
,
Других решений пока нет …