Учитывая, что контейнеры Qt требуют, чтобы их тип значения был назначаемым, то есть они должны определять конструктор по умолчанию X()
, невозможно использовать std::unique_ptr
с этими контейнерами, и поэтому, если я подумал, что я мог бы тогда использовать std::shared_ptr
чтобы получить желаемое полиморфное поведение содержимого контейнера.
Предположим, у меня есть следующий сценарий:
class Base
{
public:
virtual void foo();
};
class Derived1 : public Base
{
public:
void foo();
};
class Derived2 : public Base
{
public:
void foo();
};
QVector<std::shared_ptr<Base>> vec;
QVector
хранит, возможно, несколько экземпляров Derived1 и Derived2, смешанных вместе, и поэтому яя ожидаю, что они будут вести себя полиморфно, но я также хотел бы, чтобы эти ресурсы управлялись автоматически.
Итак, использование shared_ptr исправляет эту проблему, поэтому я должен заменить QVector
на std::vector
илиэто приемлемо?