diff --git a/src/connectable.h b/src/connectable.h index 8559d9d..aa1f741 100644 --- a/src/connectable.h +++ b/src/connectable.h @@ -6,7 +6,7 @@ #include namespace VISEQ::BASE { - class Connectable : public Draggable { + class Connectable : public Draggable, public std::enable_shared_from_this { public: Connectable() {} Connectable(Vec2Df position) : Draggable(position) {} @@ -19,6 +19,10 @@ namespace VISEQ::BASE { bool connecting = false; Vec2Df connecting_position; + std::shared_ptr getPtr(){ + return shared_from_this(); + } + virtual void init() { connectables.emplace_back(this); } @@ -36,11 +40,12 @@ namespace VISEQ::BASE { virtual void connect() { if(picked_up){ for(auto c : connectables){ - if(c.get() != this && c->hovering()) { + if(c != getPtr() && c->hovering()) { partner = c; - c->partner.reset(this); + c->partner = getPtr(); new_partner = true; partner->new_partner = true; + std::cout << "connect use count: " << getPtr().use_count() << std::endl; break; } } diff --git a/src/connector.h b/src/connector.h index 505a7aa..0388aca 100644 --- a/src/connector.h +++ b/src/connector.h @@ -31,7 +31,7 @@ namespace VISEQ::GRAPH { } std::shared_ptr getPtr(){ - return std::static_pointer_cast(shared_from_this()); + return std::static_pointer_cast(BASE::Connectable::shared_from_this()); } virtual bool hovering() override { diff --git a/src/graph-manager.h b/src/graph-manager.h index b6e6a91..6313b13 100644 --- a/src/graph-manager.h +++ b/src/graph-manager.h @@ -15,6 +15,7 @@ #include "node.h" #include +#include #include #include #include @@ -224,6 +225,11 @@ namespace VISEQ::GRAPH { void removeEdges(){ for(auto edge : remove_edges){ + edge->start_conn->partner.reset(); + std::cout << "connectors size: " << edge->start->connectors.size() << std::endl; + std::cout << "use count: " << edge->start_conn.use_count() << std::endl; + edge->start_conn.reset(); + edge->end_conn.reset(); std::cout << "connectors size: " << edge->start->connectors.size() << std::endl; std::cout << "use count: " << edge->start_conn.use_count() << std::endl; std::erase(edge->start->connectors, edge->start_conn);