mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: avoid memory leaks for HashPtrTable, PtrMap insertion (issue #749)
- disallow insert() of raw pointers, since a failed insertion (ie, entry already existed) results in an unmanaged pointer. Either insert using an autoPtr, or set() with raw pointers or autoPtr. - IOobjectList::add() now takes an autoPtr instead of an object reference - IOobjectList::remove() now returns an autoPtr instead of a raw pointer
This commit is contained in:
@ -813,28 +813,33 @@ int main(int argc, char *argv[])
|
||||
|
||||
// Read all fields in time and constant directories
|
||||
IOobjectList objects(mesh, runTime.timeName());
|
||||
IOobjectList timeObjects(IOobjectList(mesh, mesh.facesInstance()));
|
||||
forAllConstIter(IOobjectList, timeObjects, iter)
|
||||
{
|
||||
if
|
||||
(
|
||||
iter()->headerClassName() == volScalarField::typeName
|
||||
|| iter()->headerClassName() == volVectorField::typeName
|
||||
|| iter()->headerClassName() == volSphericalTensorField::typeName
|
||||
|| iter()->headerClassName() == volTensorField::typeName
|
||||
|| iter()->headerClassName() == volSymmTensorField::typeName
|
||||
|| iter()->headerClassName() == surfaceScalarField::typeName
|
||||
|| iter()->headerClassName() == surfaceVectorField::typeName
|
||||
|| iter()->headerClassName()
|
||||
== surfaceSphericalTensorField::typeName
|
||||
|| iter()->headerClassName() == surfaceSymmTensorField::typeName
|
||||
|| iter()->headerClassName() == surfaceTensorField::typeName
|
||||
)
|
||||
IOobjectList timeObjects(mesh, mesh.facesInstance());
|
||||
|
||||
// Transfer specific types
|
||||
forAllIters(timeObjects, iter)
|
||||
{
|
||||
objects.add(*iter());
|
||||
autoPtr<IOobject> objPtr(timeObjects.remove(iter));
|
||||
const auto& obj = *objPtr;
|
||||
|
||||
if
|
||||
(
|
||||
obj.headerClassName() == volScalarField::typeName
|
||||
|| obj.headerClassName() == volVectorField::typeName
|
||||
|| obj.headerClassName() == volSphericalTensorField::typeName
|
||||
|| obj.headerClassName() == volTensorField::typeName
|
||||
|| obj.headerClassName() == volSymmTensorField::typeName
|
||||
|| obj.headerClassName() == surfaceScalarField::typeName
|
||||
|| obj.headerClassName() == surfaceVectorField::typeName
|
||||
|| obj.headerClassName() == surfaceSphericalTensorField::typeName
|
||||
|| obj.headerClassName() == surfaceSymmTensorField::typeName
|
||||
|| obj.headerClassName() == surfaceTensorField::typeName
|
||||
)
|
||||
{
|
||||
objects.add(objPtr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Read vol fields and subset.
|
||||
|
||||
wordList scalarNames(objects.names(volScalarField::typeName));
|
||||
|
||||
Reference in New Issue
Block a user