diff --git a/src/experimental/platform/model_holder.cc b/src/experimental/platform/model_holder.cc index 4a53e450..c62bfd83 100644 --- a/src/experimental/platform/model_holder.cc +++ b/src/experimental/platform/model_holder.cc @@ -137,4 +137,22 @@ void ModelHolder::SetLoadError(std::string_view error) { error_[sizeof(error_) - 1] = 0; } +mjSpec* ModelHolder::ReleaseSpec() { + mjSpec* spec = spec_; + spec_ = nullptr; + return spec; +} + +mjData* ModelHolder::ReleaseData() { + mjData* data = data_; + data_ = nullptr; + return data; +} + +mjModel* ModelHolder::ReleaseModel() { + mjModel* model = model_; + model_ = nullptr; + return model; +} + } // namespace mujoco::platform diff --git a/src/experimental/platform/model_holder.h b/src/experimental/platform/model_holder.h index 88b6d166..e710b25b 100644 --- a/src/experimental/platform/model_holder.h +++ b/src/experimental/platform/model_holder.h @@ -56,6 +56,13 @@ class ModelHolder { // Returns the error message if the model failed to load. std::string_view error() const { return error_; } + // Releases ownership of the underlying MuJoCo structures. Callers are now + // responsible for calling the appropriate `mj_delete*` function on these + // objects. + mjSpec* ReleaseSpec(); + mjData* ReleaseData(); + mjModel* ReleaseModel(); + private: ModelHolder() = default; void InitFromSpec(mjSpec* spec);