Rework to weak_ptr from lots of shared_ptr.

This commit is contained in:
Sebastian
2024-12-03 01:25:49 +01:00
parent 722848d46b
commit 0040956801
10 changed files with 171 additions and 191 deletions
+5 -35
View File
@@ -3,35 +3,19 @@
#include "draggable.h"
#include "vmath.h"
#include <memory>
#include <vector>
namespace VISEQ::BASE {
class Connectable : public Draggable, public std::enable_shared_from_this<Connectable> {
class Connectable : public Draggable {
public:
Connectable() {}
Connectable(Vec2Df position) : Draggable(position) {}
virtual ~Connectable() {remove();}
inline static std::vector<std::shared_ptr<Connectable>> connectables;
std::shared_ptr<Connectable> partner;
std::weak_ptr<Connectable> partner;
bool new_partner = false;
bool connecting = false;
Vec2Df connecting_position;
std::shared_ptr<Connectable> getPtr(){
return shared_from_this();
}
virtual void init() {
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;
@@ -44,22 +28,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;
c->partner = getPtr();
new_partner = true;
partner->new_partner = true;
std::cout << "connect use count: " << getPtr().use_count() << std::endl;
std::cout << connectables.size() << std::endl;
break;
}
}
connecting = false;
}
}
virtual void draw(){