鉴于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
还是可以接受?