我有一个场景,我需要在一个集合中收集一个类型的所有对象,但我还需要一个它的一些继承类型的集合。例子:
class Particle: public someClass
{
...
public:
static std::vector<std::shared_ptr<Particle>> particleCollection;
}
class ChargedParticle: public Particle
{
...
public:
static std::vector<std::shared_ptr<ChargedParticle>> chargedParticleCollection;
}
然而,当我想销毁这些对象时,我实际上为每个 ChargedPartice 调用了两次析构函数:
Particle::particleCollection.clear(); // Okay
ChargedParticle::chargedParticleCollection.clear(); // Error: particles are already deleted
我怎样才能将子对象的集合存储在其静态容器中,并让它们的父类之一指向它们的智能指针?
我也希望能够从父类创建对象,并让父类的静态智能指针向量成为这些对象的所有者。
我的想法是,当对象不是子类集合的元素时,我以某种方式为仅调用析构函数的父类智能指针定义了一个自定义删除器。这可能吗?