我已经看过 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';
}
}