mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: cleanup autoPtr class (issue #639)
Improve alignment of its behaviour with std::unique_ptr
- element_type typedef
- release() method - identical to ptr() method
- get() method to get the pointer without checking and without releasing it.
- operator*() for dereferencing
Method name changes
- renamed rawPtr() to get()
- renamed rawRef() to ref(), removed unused const version.
Removed methods/operators
- assignment from a raw pointer was deleted (was rarely used).
Can be convenient, but uncontrolled and potentially unsafe.
Do allow assignment from a literal nullptr though, since this
can never leak (and also corresponds to the unique_ptr API).
Additional methods
- clone() method: forwards to the clone() method of the underlying
data object with argument forwarding.
- reset(autoPtr&&) as an alternative to operator=(autoPtr&&)
STYLE: avoid implicit conversion from autoPtr to object type in many places
- existing implementation has the following:
operator const T&() const { return operator*(); }
which means that the following code works:
autoPtr<mapPolyMesh> map = ...;
updateMesh(*map); // OK: explicit dereferencing
updateMesh(map()); // OK: explicit dereferencing
updateMesh(map); // OK: implicit dereferencing
for clarity it may preferable to avoid the implicit dereferencing
- prefer operator* to operator() when deferenced a return value
so it is clearer that a pointer is involve and not a function call
etc Eg, return *meshPtr_; vs. return meshPtr_();
This commit is contained in:
@ -217,7 +217,7 @@ public:
|
||||
autoPtr<sampledSet> clone() const
|
||||
{
|
||||
NotImplemented;
|
||||
return autoPtr<sampledSet>(nullptr);
|
||||
return autoPtr<sampledSet>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -209,12 +209,10 @@ public:
|
||||
{
|
||||
if (cell_)
|
||||
{
|
||||
return isoSurfCellPtr_();
|
||||
}
|
||||
else
|
||||
{
|
||||
return isoSurfPtr_();
|
||||
return *isoSurfCellPtr_;
|
||||
}
|
||||
|
||||
return *isoSurfPtr_;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -157,7 +157,7 @@ public:
|
||||
|
||||
const isoSurface& surface() const
|
||||
{
|
||||
return surfPtr_();
|
||||
return *surfPtr_;
|
||||
}
|
||||
|
||||
//- Does the surface need an update?
|
||||
|
||||
@ -141,7 +141,7 @@ public:
|
||||
//const isoSurfaceCell& surface() const
|
||||
const isoSurface& surface() const
|
||||
{
|
||||
return isoSurfPtr_();
|
||||
return *isoSurfPtr_;
|
||||
}
|
||||
|
||||
//- Does the surface need an update?
|
||||
|
||||
@ -205,7 +205,7 @@ public:
|
||||
autoPtr<sampledSurface> clone() const
|
||||
{
|
||||
NotImplemented;
|
||||
return autoPtr<sampledSurface>(nullptr);
|
||||
return autoPtr<sampledSurface>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -158,7 +158,7 @@ Foam::sampledTriSurfaceMesh::nonCoupledboundaryTree() const
|
||||
);
|
||||
}
|
||||
|
||||
return boundaryTreePtr_();
|
||||
return *boundaryTreePtr_;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -181,7 +181,7 @@ public:
|
||||
autoPtr<surfMeshSampler> clone() const
|
||||
{
|
||||
NotImplemented;
|
||||
return autoPtr<surfMeshSampler>(nullptr);
|
||||
return autoPtr<surfMeshSampler>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -152,7 +152,7 @@ Foam::discreteSurface::nonCoupledboundaryTree() const
|
||||
);
|
||||
}
|
||||
|
||||
return boundaryTreePtr_();
|
||||
return *boundaryTreePtr_;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user