Still the ownership problem. 5, why 5? It should be 3...
This commit is contained in:
+8
-3
@@ -6,7 +6,7 @@
|
||||
#include <vector>
|
||||
|
||||
namespace VISEQ::BASE {
|
||||
class Connectable : public Draggable {
|
||||
class Connectable : public Draggable, public std::enable_shared_from_this<Connectable> {
|
||||
public:
|
||||
Connectable() {}
|
||||
Connectable(Vec2Df position) : Draggable(position) {}
|
||||
@@ -19,6 +19,10 @@ namespace VISEQ::BASE {
|
||||
bool connecting = false;
|
||||
Vec2Df connecting_position;
|
||||
|
||||
std::shared_ptr<Connectable> 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;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ namespace VISEQ::GRAPH {
|
||||
}
|
||||
|
||||
std::shared_ptr<Connectable> getPtr(){
|
||||
return std::static_pointer_cast<Connector>(shared_from_this());
|
||||
return std::static_pointer_cast<Connector>(BASE::Connectable::shared_from_this());
|
||||
}
|
||||
|
||||
virtual bool hovering() override {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "node.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <cstdio>
|
||||
#include <iostream>
|
||||
#include <iterator>
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user