From cd4e406cf14982ff6e797da947b7fcec8e587c53 Mon Sep 17 00:00:00 2001 From: Adam Kewley Date: Fri, 24 Feb 2023 16:11:36 +0100 Subject: [PATCH] Reverted OpenSim::Controller fix to use constructProperties (#3247) --- OpenSim/Simulation/Control/Controller.cpp | 21 +++++++++++++++++---- OpenSim/Simulation/Control/Controller.h | 3 +++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/OpenSim/Simulation/Control/Controller.cpp b/OpenSim/Simulation/Control/Controller.cpp index 6a37faa325..72a27b1741 100644 --- a/OpenSim/Simulation/Control/Controller.cpp +++ b/OpenSim/Simulation/Control/Controller.cpp @@ -49,10 +49,7 @@ Controller::Controller() : _numControls{0}, _actuatorSet{} { - setAuthors("Ajay Seth, Frank Anderson, Chand John, Samuel Hamner"); - constructProperty_enabled(true); - constructProperty_actuator_list(); - _actuatorSet.setMemoryOwner(false); + constructProperties(); } Controller::Controller(Controller const& src) : @@ -62,11 +59,16 @@ Controller::Controller(Controller const& src) : _numControls{src._numControls}, _actuatorSet{} { + // care: the reason this custom copy constructor exists is to prevent + // a memory leak (#3247) _actuatorSet.setMemoryOwner(false); } Controller& Controller::operator=(Controller const& src) { + // care: the reason this custom copy assignment exists is to prevent + // a memory leak (#3247) + if (&src != this) { static_cast(*this) = static_cast(src); @@ -86,6 +88,17 @@ Controller::~Controller() noexcept = default; //_____________________________________________________________________________ //_____________________________________________________________________________ +/** + * Connect properties to local pointers. + */ +void Controller::constructProperties() +{ + setAuthors("Ajay Seth, Frank Anderson, Chand John, Samuel Hamner"); + constructProperty_enabled(true); + constructProperty_actuator_list(); + _actuatorSet.setMemoryOwner(false); +} + void Controller::updateFromXMLNode(SimTK::Xml::Element& node, int versionNumber) { if(versionNumber < XMLDocument::getLatestVersion()) { diff --git a/OpenSim/Simulation/Control/Controller.h b/OpenSim/Simulation/Control/Controller.h index f68564c67d..71dd9bcb65 100644 --- a/OpenSim/Simulation/Control/Controller.h +++ b/OpenSim/Simulation/Control/Controller.h @@ -146,6 +146,9 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(Controller, ModelComponent); // the (sub)set of Model actuators that this controller controls */ Set _actuatorSet; + // construct and initialize properties + void constructProperties(); + //============================================================================= }; // END of class Controller