Является ли плохой практикой использование std :: shared_ptr с контейнерами Qt при работе с полиморфными классами? - PullRequest
0 голосов
/ 17 мая 2019

Учитывая, что контейнеры 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 илиэто приемлемо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...