regIOobject: Added a move constructor

to resolve an issue with the unexpected registration of DimensionedFields
constructed from an unregistered temporary field.
This commit is contained in:
Henry Weller
2022-04-08 18:57:37 +01:00
parent b8ce733e4b
commit 9297b3c679
4 changed files with 25 additions and 3 deletions

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -71,6 +71,22 @@ Foam::regIOobject::regIOobject(const regIOobject& rio)
}
Foam::regIOobject::regIOobject(const regIOobject&& rio)
:
IOobject(rio),
registered_(false),
ownedByRegistry_(false),
watchIndices_(),
eventNo_(db().getEvent())
{
if (rio.registered_)
{
const_cast<regIOobject&>(rio).checkOut();
checkIn();
}
}
Foam::regIOobject::regIOobject(const regIOobject& rio, bool registerCopy)
:
IOobject(rio),

View File

@ -111,6 +111,10 @@ public:
//- Copy constructor
regIOobject(const regIOobject&);
//- Move constructor
// Registers copy if the object is registered
regIOobject(const regIOobject&&);
//- Copy constructor, transferring registry registration to copy
// if registerCopy is true
regIOobject(const regIOobject&, bool registerCopy);

View File

@ -135,7 +135,7 @@ DimensionedField<Type, GeoMesh>::DimensionedField
bool reuse
)
:
regIOobject(df, reuse),
regIOobject(df, reuse && df.registered()),
Field<Type>(df, reuse),
mesh_(df.mesh_),
dimensions_(df.dimensions_)
@ -148,7 +148,7 @@ DimensionedField<Type, GeoMesh>::DimensionedField
DimensionedField<Type, GeoMesh>&& df
)
:
regIOobject(move(df), true),
regIOobject(move(df)),
Field<Type>(move(df)),
mesh_(df.mesh_),
dimensions_(move(df.dimensions_))

View File

@ -720,6 +720,8 @@ Foam::GeometricField<Type, PatchField, GeoMesh>::GeometricField
boundaryField_ == tgf().boundaryField_;
tgf.clear();
readIfPresent();
}