RefBase classes refactored to use smart pointers#1682
Open
marauder2k7 wants to merge 1 commit intoTorqueGameEngines:developmentfrom
Open
RefBase classes refactored to use smart pointers#1682marauder2k7 wants to merge 1 commit intoTorqueGameEngines:developmentfrom
marauder2k7 wants to merge 1 commit intoTorqueGameEngines:developmentfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
WeakRefBase acts as the base class for almost all EngineObjects but because it used a hard ref counted value it was not thread safe and in turn made all engine subclasses susceptible to race conditions. In an effort to reduce this the class is now driven by a smart shared_ptr.
We use new throughout the engine so the actual shared_ptr logic had to be abstracted away to a weakcontrolblock class. Once the weakrefbase is destructed the control blocks object iss nulled out. Then the shared_ptr as free'd. Any weak ptrs pointing to this object are then free'd automatically. The only class that does its own refcounting is now the StrongRefBase but this should be easily fixed with using the base's shared_ptr ref counting instead. StrongRefBase has to call destroySelf.