Deleting Connectable from the connectables vector is resulting in segfault.

This commit is contained in:
Sebastian
2024-12-02 00:28:44 +01:00
parent f926b95092
commit 722848d46b
7 changed files with 28 additions and 19 deletions
+10 -2
View File
@@ -10,7 +10,7 @@ namespace VISEQ::BASE {
public:
Connectable() {}
Connectable(Vec2Df position) : Draggable(position) {}
virtual ~Connectable() {}
virtual ~Connectable() {remove();}
inline static std::vector<std::shared_ptr<Connectable>> connectables;
@@ -24,9 +24,14 @@ namespace VISEQ::BASE {
}
virtual void init() {
connectables.emplace_back(this);
VISEQ::BASE::Connectable::connectables.emplace_back(this);
}
virtual void remove() {
std::cout << "delete Connectable: " << getPtr() << std::endl;
// std::erase(VISEQ::BASE::Connectable::connectables, getPtr());
}
virtual void drag(Vec2Df new_position) override {
connecting = true;
connecting_position = new_position;
@@ -39,6 +44,8 @@ namespace VISEQ::BASE {
virtual void connect() {
if(picked_up){
std::cout << getPtr() << std::endl;
std::cout << "connect use count: " << getPtr().use_count() << std::endl;
for(auto c : connectables){
if(c != getPtr() && c->hovering()) {
partner = c;
@@ -46,6 +53,7 @@ namespace VISEQ::BASE {
new_partner = true;
partner->new_partner = true;
std::cout << "connect use count: " << getPtr().use_count() << std::endl;
std::cout << connectables.size() << std::endl;
break;
}
}