我有一个由三个类组成的层次结构,其中
我确信这个向量只会被同时从这两个基类继承的对象填充。
问题出现在我尝试使用指向
显然,如果我将
我遇到了一个运行时错误,导致程序崩溃。为什么会发生这种情况,我该如何解决?
Derived
继承自 Selectable
和 Drawable
。然后,我有一个 std::vector
,其中包含 Derived
对象,类型为 std::unique_ptr<Drawable>
。我确信这个向量只会被同时从这两个基类继承的对象填充。
问题出现在我尝试使用指向
Selected
的指针从向量中删除某个元素时。#include <vector>
#include <memory>
#include <algorithm>
struct Selectable {
virtual ~Selectable() = 0;
};
Selectable::~Selectable() = default;
struct Drawable {
virtual ~Drawable() = 0;
};
Drawable::~Drawable() = default;
struct Derived : Selectable, Drawable {};
int main()
{
std::vector<std::unique_ptr<Drawable>> vec;
for (int i = 0; i < 5; ++i) {
vec.push_back(std::make_unique<Derived>());
}
Selectable* selected = dynamic_cast<Selectable*>(vec[2].get());
vec.erase(std::remove_if(vec.begin(), vec.end(),
[selected](auto&& ptr) {
return ptr.get() == dynamic_cast<Drawable*>(selected);
}), vec.end());
}
显然,如果我将
selected
指向Drawable
的指针,一切都很好,但这不是我的意图。我遇到了一个运行时错误,导致程序崩溃。为什么会发生这种情况,我该如何解决?