shared_ptr std::dynamic_pointer_cast 失败并出现“试图引用已删除的函数”错误

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

我已经看过 StackOverflow 中关于这个类似错误的所有帖子,但仍然找不到导致我出现问题的原因。

我正在使用

std::dynamic_pointer_cast
std::shared_ptr<Base>
对象转换为
std::shared_ptr<DerivedShared>
对象,但我遇到了“试图引用已删除的函数”错误。我已经确保
Base
析构函数是虚拟的,但错误仍然存在。

什么可能导致此错误,我该如何解决?标准库中是否存在任何可能导致此问题的已知限制或错误?任何见解或建议将不胜感激。

P.S:我知道它适用于

static_pointer_cast
但想知道是什么导致了
dynamic_pointer_cast
的问题!

struct Base
{
    Base() = default;
    virtual ~Base() = default;
    //Copy
    Base(const Base&) = default;
    Base& operator=(const Base&) = default;
    //Move
    Base(Base&&) = default;
    Base& operator=(Base&&) = default;
};


struct DerivedShared : public  Base
{
public:
    DerivedShared() //: data(std::shared_ptr<int[]>(new int[3]{1,2,3}))
    {
        //data = std::make_shared<int[]>(new int[3]{ 1,2,3 });
        data = std::shared_ptr<int[]>(new int[3]{ 1,2,3 });
    }
    
public:
    std::shared_ptr<int[]> data;
};

int main()
{
    std::cout << "----------------------------------------\n";
    std::shared_ptr<Base> base5 = std::make_shared<DerivedShared>();
    for (size_t i = 0; i < 3; ++i)
    {
        std::cout << std::dynamic_pointer_cast<DerivedShared>(base5)->data[i] << '\n';
    }
}
c++ shared-ptr dynamic-cast
© www.soinside.com 2019 - 2024. All rights reserved.