diff --git a/src/OpenFOAM/db/objectRegistry/objectRegistry.C b/src/OpenFOAM/db/objectRegistry/objectRegistry.C index dbbf8a82e5..df9da24055 100644 --- a/src/OpenFOAM/db/objectRegistry/objectRegistry.C +++ b/src/OpenFOAM/db/objectRegistry/objectRegistry.C @@ -177,12 +177,16 @@ bool Foam::objectRegistry::checkOut(regIOobject& io) const } else { + regIOobject* object = iter(); + + bool hasErased = const_cast(*this).erase(iter); + if (io.ownedByRegistry()) { - delete iter(); + delete object; } - return const_cast(*this).erase(iter); + return hasErased; } } else diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.C b/src/OpenFOAM/meshes/MeshObject/MeshObject.C index fddfadfa59..ba67517700 100644 --- a/src/OpenFOAM/meshes/MeshObject/MeshObject.C +++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.C @@ -105,6 +105,29 @@ const Type& Foam::MeshObject::New // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * // +template +bool Foam::MeshObject::Delete(const Mesh& mesh) +{ + if (mesh.db().objectRegistry::foundObject(Type::typeName)) + { + return mesh.db().objectRegistry::checkOut + ( + const_cast + ( + mesh.db().objectRegistry::lookupObject + ( + Type::typeName + ) + ) + ); + } + else + { + return false; + } +} + + template Foam::MeshObject::~MeshObject() { diff --git a/src/OpenFOAM/meshes/MeshObject/MeshObject.H b/src/OpenFOAM/meshes/MeshObject/MeshObject.H index b142b47f96..ee20ccfa3e 100644 --- a/src/OpenFOAM/meshes/MeshObject/MeshObject.H +++ b/src/OpenFOAM/meshes/MeshObject/MeshObject.H @@ -78,6 +78,8 @@ public: // Destructor + static bool Delete(const Mesh& mesh); + virtual ~MeshObject();