gpt4 book ai didi

c++ - 使用 shared_ptr 的派生类对象的 vector

转载 作者:行者123 更新时间:2023-11-30 03:23:51 28 4
gpt4 key购买 nike

我有这些类(class):

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

我希望能够创建一个 void add(const Element & e)将派生类对象插入到 shared_ptr vector 中的函数。我找到的答案是这样的:

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

如果我为每个派生类创建一个重载的 add 函数,这可能会起作用,但这似乎是一个糟糕的解决方案。

所以我的问题是:如何将派生类对象插入到 vector<shared_ptr<CElement>>> 中不知道我要插入什么派生类?

最佳答案

这就是类型转换之美。您的派生类可以向下转换为基类。

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>

只是不要忘记在您的基类中有一个虚拟析构函数以避免资源泄漏!

关于c++ - 使用 shared_ptr 的派生类对象的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50165109/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com