diff --git a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H index 5c76321ab6354e74bb2eea845176cb4dbd60162b..733c11cd06754af1d40abc4b9f5220068eac32f6 100644 --- a/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H +++ b/src/OpenFOAM/containers/HashTables/HashPtrTable/HashPtrTableI.H @@ -5,7 +5,7 @@ \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- - Copyright (C) 2018 OpenCFD Ltd. + Copyright (C) 2018-2020 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -86,7 +86,19 @@ inline bool Foam::HashPtrTable<T, Key, Hash>::set T* ptr ) { - return this->parent_type::set(key, ptr); + // Newer: const T* old = this->get(key); + + iterator iter(this->find(key)); + const T* old = (iter.good() ? iter.val() : nullptr); + + const bool ok = this->parent_type::set(key, ptr); + + if (ok && old != ptr) + { + delete const_cast<T*>(old); + } + + return ok; }