std::shared_pointer 向量可以保存指向同一基类的不同子类的共享指针吗?

问题描述 投票:0回答:1

我一直在尝试创建一个动态数据结构来保存许多不同类的对象,所有这些对象都派生自同一个基类。 我在很多地方都找到了建议,可以使用共享指针向量来完成此操作。但是我无法让它发挥作用。 代码如下:

class ElementDetail
{
public:
    virtual void* getData() = 0;

};

class TypecodeDetail : ElementDetail
{
public:
    TypecodeDetail(uint32_t typecode) : _typeCode(typecode) {}

    void* getData();

private:
    uint32_t _typeCode{};
};

int main()
{
    std::vector<std::shared_ptr<ElementDetail>> details;
    details.push_back(std::make_shared<TypecodeDetail>());
}

这会在push_back上产生错误:

错误(活动)E0304 没有重载函数的实例与 参数列表 参数类型为:(std::shared_ptr) 对象类型为: std::vectorstd::shared_ptr>

我已经从我搜索过的许多类似问题的答案中复制了这段代码,但它不起作用。谁能告诉我为什么?我正在尝试的可能吗?

c++ inheritance stdvector
1个回答
0
投票

智能指针几乎在所有方面都模仿实际指针。包括通过指向基类的指针处理多态性。

所以回答你的问题:是的,那会起作用。

问题是您尝试默认构造一个

TypecodeDetail
对象,该对象没有默认构造函数。您需要传递
TypecodeDetail
:

所需的实际参数
details.push_back(std::make_shared<TypecodeDetail>(123));  // For example
© www.soinside.com 2019 - 2024. All rights reserved.