使用shared_ptr导出的类对象的向量

时间:2018-05-03 23:31:49

标签: c++ derived-class

我有这些课程:

class Element{
};
class Button : public Element{
};
class Label : public Element{
};
class Input : public Element{
};

我希望能够创建一个void add(const Element & e)函数,将派生类对象插入到shared_ptrs的向量中。 我发现的答案提示如下:

vector<shared_ptr<CElement>>> vec;
vec.push_back(make_shared<DerivedClass>());

如果我为每个派生类创建了一个重载的add函数,那么这可能会有效,但这似乎是一个悲惨的解决方案。

所以我的问题是:如何在不知道我试图插入的派生类的情况下将派生类对象插入vector<shared_ptr<CElement>>>

1 个答案:

答案 0 :(得分:2)

这就是铸造之美。您的派生类可以下载到基类。

void add(std::shared_ptr<Element> ptr) {
    vec.push_back(ptr);
}

add(std::make_shared<Button>()); // std::shared_ptr<Button> casted to std::shared_ptr<Element>

不要忘记在基类中使用虚拟析构函数以避免资源泄漏!