From 5ae79bcc5e4f4613b42629b9ca3a53e80dda8dd6 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Mon, 11 Jun 2018 13:05:42 -0700 Subject: [PATCH] Use weak_ptr for pointers back to parent --- libraries/entities/src/EntityTreeElement.cpp | 6 +++--- libraries/entities/src/EntityTreeElement.h | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/entities/src/EntityTreeElement.cpp b/libraries/entities/src/EntityTreeElement.cpp index cbcddfc57b..719c065522 100644 --- a/libraries/entities/src/EntityTreeElement.cpp +++ b/libraries/entities/src/EntityTreeElement.cpp @@ -33,7 +33,7 @@ EntityTreeElement::~EntityTreeElement() { OctreeElementPointer EntityTreeElement::createNewElement(unsigned char* octalCode) { auto newChild = EntityTreeElementPointer(new EntityTreeElement(octalCode)); - newChild->setTree(_myTree); + newChild->setTree(getTree()); return newChild; } @@ -44,7 +44,7 @@ void EntityTreeElement::init(unsigned char* octalCode) { OctreeElementPointer EntityTreeElement::addChildAtIndex(int index) { OctreeElementPointer newElement = OctreeElement::addChildAtIndex(index); - std::static_pointer_cast(newElement)->setTree(_myTree); + std::static_pointer_cast(newElement)->setTree(getTree()); return newElement; } @@ -475,7 +475,7 @@ bool EntityTreeElement::removeEntityItem(EntityItemPointer entity, bool deletion int EntityTreeElement::readElementDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args) { - return _myTree->readEntityDataFromBuffer(data, bytesLeftToRead, args); + return getTree()->readEntityDataFromBuffer(data, bytesLeftToRead, args); } void EntityTreeElement::addEntityItem(EntityItemPointer entity) { diff --git a/libraries/entities/src/EntityTreeElement.h b/libraries/entities/src/EntityTreeElement.h index 76e1e40812..f9f930a9fc 100644 --- a/libraries/entities/src/EntityTreeElement.h +++ b/libraries/entities/src/EntityTreeElement.h @@ -161,8 +161,8 @@ public: virtual uint16_t size() const; bool hasEntities() const { return size() > 0; } - void setTree(EntityTreePointer tree) { _myTree = tree; } - EntityTreePointer getTree() const { return _myTree; } + void setTree(EntityTreePointer tree) { _myTree.swap(std::weak_ptr(tree)); } + EntityTreePointer getTree() const { return _myTree.lock(); } void addEntityItem(EntityItemPointer entity); @@ -234,7 +234,7 @@ public: protected: virtual void init(unsigned char * octalCode) override; - EntityTreePointer _myTree; + std::weak_ptr _myTree; EntityItems _entityItems; };