autoPtr< T > Class Template Reference

Pointer management similar to std::unique_ptr, with some additional methods and type checking. More...

Public Types

typedef T element_type
 Type of object being managed. More...
 
typedef Tpointer
 Pointer to type of object being managed. More...
 

Public Member Functions

constexpr autoPtr () noexcept
 Construct with no managed object. More...
 
constexpr autoPtr (std::nullptr_t) noexcept
 Construct with no managed object (literal nullptr). More...
 
 autoPtr (T *p) noexcept
 Construct, taking ownership of the pointer. More...
 
 autoPtr (autoPtr< T > &&ap) noexcept
 Move construct, transferring ownership. More...
 
template<class U >
 autoPtr (autoPtr< U > &&ap)
 Move construct, transferring ownership from derived type. More...
 
 autoPtr (const autoPtr< T > &ap) noexcept
 A move construct disguised as a copy construct (transfers ownership) More...
 
 ~autoPtr () noexcept
 Deletes the managed object if such is present. More...
 
bool empty () const noexcept
 Deprecated(2020-07) True if the managed pointer is null. More...
 
bool valid () const noexcept
 True if the managed pointer is non-null. More...
 
Tget () noexcept
 Return pointer to managed object without nullptr checking. More...
 
const Tget () const noexcept
 Return const pointer to managed object without nullptr checking. More...
 
Tref ()
 Return reference to the managed object without nullptr checking. More...
 
Trelease () noexcept
 Return pointer to the managed object and release ownership. More...
 
Tptr () noexcept
 Same as release(). More...
 
void clear () noexcept
 Same as reset(nullptr) More...
 
void reset (T *p=nullptr) noexcept
 Delete managed object and set to new given pointer. More...
 
void reset (autoPtr< T > &&ap) noexcept
 Delete managed object and set to new given pointer. More...
 
void swap (autoPtr< T > &other) noexcept
 Swaps the managed object with other autoPtr. More...
 
template<class... Args>
autoPtr< Tclone (Args &&... args) const
 Copy construct by invoking clone on underlying managed object. More...
 
Toperator* ()
 Return reference to the managed object. More...
 
const Toperator* () const
 Return const reference to the object. More...
 
Toperator-> ()
 Dereferences (non-const) pointer to the managed object. More...
 
const Toperator-> () const
 Dereferences (const) pointer to the managed object. More...
 
Toperator() ()
 Return reference to the object data. More...
 
const Toperator() () const
 Return const reference to the object data. More...
 
 operator bool () const noexcept
 True if the managed pointer is non-null. More...
 
 operator const T * () const noexcept
 Cast to pointer type. More...
 
 operator T* () noexcept
 Cast to pointer type. More...
 
 operator const T & () const
 Deprecated(2019-01) Automatic cast conversion to underlying type. More...
 
void operator= (autoPtr< T > &&ap) noexcept
 Transfer object ownership from parameter. More...
 
template<class U >
void operator= (autoPtr< U > &&ap) noexcept
 Transfer object ownership from parameter. More...
 
void operator= (const autoPtr< T > &ap)=delete
 No move assignment disguised as a copy assignment. More...
 
void operator= (std::nullptr_t) noexcept
 Reset via assignment from literal nullptr. More...
 
void set (T *p) noexcept
 Deprecated(2018-02) Identical to reset(). More...
 
void operator= (T *p)=delete
 Deprecated(2018-02) No copy assignment from plain pointer. More...
 
template<class... Args>
Foam::autoPtr< TNew (Args &&... args)
 
template<class U , class... Args>
Foam::autoPtr< TNewFrom (Args &&... args)
 
template<class... Args>
Foam::autoPtr< Tclone (Args &&... args) const
 

Static Public Member Functions

template<class... Args>
static autoPtr< TNew (Args &&... args)
 Construct autoPtr of T with forwarding arguments. More...
 
template<class U , class... Args>
static autoPtr< TNewFrom (Args &&... args)
 Construct autoPtr from derived type with forwarding arguments. More...
 

Detailed Description

template<class T>
class Foam::autoPtr< T >

Pointer management similar to std::unique_ptr, with some additional methods and type checking.

Note
Parts of the interface now mirror std::unique_ptr, but since it pre-dates both C++11 and std::unique_ptr, it has some additional idiosyncrasies. The const-reference constructors and assignment operators actually use move semantics to allow their participation in default constructible, default assignable classes.
Source files

Definition at line 53 of file HashPtrTable.H.

Member Typedef Documentation

◆ element_type

typedef T element_type

Type of object being managed.

Definition at line 76 of file autoPtr.H.

◆ pointer

typedef T* pointer

Pointer to type of object being managed.

Definition at line 79 of file autoPtr.H.

Constructor & Destructor Documentation

◆ autoPtr() [1/6]

constexpr autoPtr ( )
inlineconstexprnoexcept

Construct with no managed object.

Definition at line 53 of file autoPtrI.H.

◆ autoPtr() [2/6]

constexpr autoPtr ( std::nullptr_t  )
inlineconstexprnoexcept

Construct with no managed object (literal nullptr).

Definition at line 60 of file autoPtrI.H.

◆ autoPtr() [3/6]

autoPtr ( T p)
inlineexplicitnoexcept

Construct, taking ownership of the pointer.

Definition at line 67 of file autoPtrI.H.

◆ autoPtr() [4/6]

autoPtr ( autoPtr< T > &&  ap)
inlinenoexcept

Move construct, transferring ownership.

Definition at line 74 of file autoPtrI.H.

◆ autoPtr() [5/6]

autoPtr ( autoPtr< U > &&  ap)
inlineexplicit

Move construct, transferring ownership from derived type.

U must be derivable from T

Note
Future check for std::is_base_of ?

Definition at line 82 of file autoPtrI.H.

◆ autoPtr() [6/6]

autoPtr ( const autoPtr< T > &  ap)
inlinenoexcept

A move construct disguised as a copy construct (transfers ownership)

Remarks
This should ideally be deleted - pending cleanup of code currently relying on this behaviour.

Definition at line 127 of file autoPtr.H.

◆ ~autoPtr()

~autoPtr ( )
inlinenoexcept

Deletes the managed object if such is present.

Definition at line 91 of file autoPtrI.H.

Member Function Documentation

◆ New() [1/2]

static autoPtr<T> New ( Args &&...  args)
inlinestatic

Construct autoPtr of T with forwarding arguments.

Parameters
argslist of arguments with which an instance of T will be constructed.
Note
Similar to std::make_unique, but the overload for array types is not disabled.

Referenced by polyMeshAdder::add(), zoneCellStencils::allCoupledFacesPatch(), cellToFaceStencil::allCoupledFacesPatch(), cellToCellStencil::allCoupledFacesPatch(), polyTopoChange::changeMesh(), subBody::clone(), solidMixtureProperties::clone(), liquidMixtureProperties::clone(), boundaryPatch::clone(), regionModelFunctionObject::clone(), rigidBody::clone(), cellShape::clone(), solidProperties::clone(), ignitionSite::clone(), pointToPointPlanarInterpolation::clone(), curve::clone(), RASModelVariables::clone(), surfaceZonesInfo::clone(), cellZone::clone(), cellModel::clone(), pointZone::clone(), faPatch::clone(), dimensionSet::clone(), bitSet::clone(), faceZone::clone(), polyPatch::clone(), coordinateSystem::clone(), AMIInterpolation::clone(), IOobject::clone(), particle< Type >::clone(), exprResult::clone(), dictionary::clone(), mapDistribute::clone(), fvMeshDistribute::distribute(), sampledSet::gather(), PDRblock::innerMesh(), IOobjectList::IOobjectList(), Foam::loadPointField(), polyTopoChange::makeMesh(), voxelMeshSearch::makeMesh(), meshRefinement::makePatch(), FIREMeshReader::mesh(), meshReader::mesh(), blockMesh::mesh(), reader::mesh(), lumpedPointIOMovement::New(), motionInterpolation::New(), procLduInterface::New(), lumpedPointController::New(), solidMixtureProperties::New(), surfZone::New(), rigidBody::New(), cellModel::New(), block::New(), colourTable::New(), Time::New(), dictionary::New(), momentum::newField(), ensightCase::newGeometry(), fvMeshTools::newMesh(), zoneCellStencils::nonEmptyFacesPatch(), phaseModel::iNew::operator()(), ignitionSite::iNew::operator()(), passiveParticle::iNew::operator()(), solidParticle::iNew::operator()(), trackedParticle::iNew::operator()(), molecule::iNew::operator()(), particle< Type >::iNew::operator()(), probes::prepare(), UnsortedMeshedSurface< Face >::releaseZoneIds(), fvMeshSubset::setCellSubset(), polyTopoChanger::topoChangeRequest(), streamLineBase::wallPatch(), and vtkWrite::write().

◆ NewFrom() [1/2]

static autoPtr<T> NewFrom ( Args &&...  args)
inlinestatic

Construct autoPtr from derived type with forwarding arguments.

Parameters
argslist of arguments with which an instance of U will be constructed.
Note
Similar to New but for derived types. Future check for std::is_base_of ?

◆ empty()

bool empty ( ) const
inlinenoexcept

Deprecated(2020-07) True if the managed pointer is null.

Deprecated:
(2020-07) - use bool operator

Definition at line 148 of file autoPtr.H.

◆ valid()

bool valid ( ) const
inlinenoexcept

True if the managed pointer is non-null.

Definition at line 151 of file autoPtr.H.

Referenced by averageNeighbourFvGeometryScheme::movePoints(), and histogram::write().

Here is the caller graph for this function:

◆ get() [1/2]

T* get ( )
inlinenoexcept

Return pointer to managed object without nullptr checking.

Pointer remains under autoPtr management.

Definition at line 158 of file autoPtr.H.

Referenced by refinementHistory::add(), refinementHistory::apply(), and HashPtrTable< exprResult >::insert().

Here is the caller graph for this function:

◆ get() [2/2]

const T* get ( ) const
inlinenoexcept

Return const pointer to managed object without nullptr checking.

Pointer remains under autoPtr management.

Definition at line 162 of file autoPtr.H.

◆ ref()

T& ref ( )
inline

Return reference to the managed object without nullptr checking.

When get() == nullptr, additional guards may be required to avoid inadvertent access of a nullptr.

Definition at line 167 of file autoPtr.H.

Referenced by energySpectrum::calcAndWriteSpectrum(), TDACChemistryModel< CompType, ThermoType >::TDACChemistryModel(), ensightMesh::write(), Foam::writePointField(), Foam::writeVolField(), and ensightWrite::writeVolFields().

Here is the caller graph for this function:

◆ release()

T * release ( )
inlinenoexcept

Return pointer to the managed object and release ownership.

Definition at line 100 of file autoPtrI.H.

Referenced by PtrList< transferModel >::append(), PtrDynList< Foam::profilingInformation >::append(), HashPtrTable< exprResult >::insert(), PtrList< transferModel >::set(), PtrDynList< Foam::profilingInformation >::set(), HashPtrTable< exprResult >::set(), and regIOobject::store().

Here is the caller graph for this function:

◆ ptr()

T* ptr ( )
inlinenoexcept

Same as release().

Remarks
Method naming consistent with Foam::tmp

Definition at line 177 of file autoPtr.H.

Referenced by variablesSet::allocateField(), variablesSet::allocateFluxField(), rigidBodyModel::join(), multiphaseSystem::multiphaseSystem(), PtrListDictionary< phaseModel >::set(), and OFstreamCollator::write().

Here is the caller graph for this function:

◆ clear()

void clear ( )
inlinenoexcept

Same as reset(nullptr)

Remarks
Method naming consistent with Foam::tmp

Definition at line 181 of file autoPtr.H.

Referenced by polyMeshAdder::add(), meshRefinement::distribute(), snappySnapDriver::doSnap(), rawIOField< Type >::rawIOField(), masterUncollatedFileOperation::readStream(), FLMAsurfaceFormat< Face >::write(), and FIREMeshWriter::write().

Here is the caller graph for this function:

◆ reset() [1/2]

void reset ( T p = nullptr)
inlinenoexcept

Delete managed object and set to new given pointer.

Definition at line 109 of file autoPtrI.H.

Referenced by refinementHistory::add(), polyMeshAdder::add(), ATCstandard::addATC(), ATCUaGradU::addATC(), AMIInterpolation::agglomerate(), variablesSet::allocateRenamedField(), refinementHistory::apply(), sensitivityVolBSplinesFI::assembleSensitivities(), sensitivityBezierFI::assembleSensitivities(), sensitivitySurface::assembleSensitivities(), PatchInteractionFields< CloudType >::clearOrReset(), writeFile::createFile(), snappySnapDriver::detectNearSurfaces(), distributedTriSurfaceMesh::distribute(), snappySnapDriver::doSnap(), searchablePlateFeatures::features(), sensitivitySurfacePoints::finaliseFaceMultiplier(), distributedTriSurfaceMesh::findNearest(), PatchTools::gatherAndMerge(), distributedTriSurfaceMesh::getVolumeType(), if(), polyTopoChange::makeMesh(), rigidBodyModel::merge(), lineSearch::New(), entry::New(), isoSurfaceBase::New(), functionObjectList::New(), Foam::vtk::newFormatter(), masterUncollatedFileOperation::NewIFstream(), processorCyclicPolyPatch::order(), projectCurveEdge::position(), projectEdge::position(), projectFace::project(), radiativeIntensityRay::radiativeIntensityRay(), decomposedBlockData::read(), functionObjectList::read(), BilgerMixtureFraction::read(), masterUncollatedFileOperation::read(), decomposedBlockData::readBlock(), decomposedBlockData::readBlocks(), masterUncollatedFileOperation::readStream(), autoPtr< Foam::ThermalDiffusivity >::set(), cyclicAMIPolyPatch::setAMIFaces(), variablesSet::setFluxField(), histogram::write(), externalCoupled::writeGeometry(), and decomposedBlockData::writeObject().

Here is the caller graph for this function:

◆ reset() [2/2]

void reset ( autoPtr< T > &&  ap)
inlinenoexcept

Delete managed object and set to new given pointer.

Remarks
Same as move assign, but better for code documentation

Definition at line 117 of file autoPtrI.H.

◆ swap()

void swap ( autoPtr< T > &  other)
inlinenoexcept

Swaps the managed object with other autoPtr.

Definition at line 124 of file autoPtrI.H.

◆ clone() [1/2]

autoPtr<T> clone ( Args &&...  args) const
inline

Copy construct by invoking clone on underlying managed object.

A no-op if no pointer is managed

Parameters
argslist of arguments for clone

Referenced by mapPolyMesh::mapPolyMesh().

Here is the caller graph for this function:

◆ operator*() [1/2]

T & operator* ( )
inline

Return reference to the managed object.

FatalError if no pointer is managed

Definition at line 150 of file autoPtrI.H.

Referenced by autoPtr< wallLubricationModel >::operator const wallLubricationModel &().

Here is the caller graph for this function:

◆ operator*() [2/2]

const T & operator* ( ) const
inline

Return const reference to the object.

FatalError if no pointer is managed

Definition at line 163 of file autoPtrI.H.

◆ operator->() [1/2]

T * operator-> ( )
inline

Dereferences (non-const) pointer to the managed object.

FatalError if no pointer is managed

Definition at line 170 of file autoPtrI.H.

◆ operator->() [2/2]

const T * operator-> ( ) const
inline

Dereferences (const) pointer to the managed object.

FatalError if no pointer is managed

Definition at line 183 of file autoPtrI.H.

◆ operator()() [1/2]

T & operator() ( )
inline

Return reference to the object data.

FatalError if no pointer is managed

Definition at line 190 of file autoPtrI.H.

◆ operator()() [2/2]

const T & operator() ( ) const
inline

Return const reference to the object data.

FatalError if no pointer is managed

Definition at line 197 of file autoPtrI.H.

◆ operator bool()

operator bool ( ) const
inlineexplicitnoexcept

True if the managed pointer is non-null.

Definition at line 233 of file autoPtr.H.

◆ operator const T *()

operator const T * ( ) const
inlinenoexcept

Cast to pointer type.

Definition at line 236 of file autoPtr.H.

◆ operator T*()

operator T* ( )
inlinenoexcept

Cast to pointer type.

Definition at line 239 of file autoPtr.H.

◆ operator const T &()

operator const T & ( ) const
inline

Deprecated(2019-01) Automatic cast conversion to underlying type.

FatalError if no pointer is managed

Deprecated:
(2019-01) Can result in inadvertent conversions where the user should really know or check if the pointer is valid prior to using.

Definition at line 247 of file autoPtr.H.

◆ operator=() [1/5]

void operator= ( autoPtr< T > &&  ap)
inlinenoexcept

Transfer object ownership from parameter.

Definition at line 204 of file autoPtrI.H.

◆ operator=() [2/5]

void operator= ( autoPtr< U > &&  ap)
inlinenoexcept

Transfer object ownership from parameter.

Definition at line 216 of file autoPtrI.H.

◆ operator=() [3/5]

void operator= ( const autoPtr< T > &  ap)
delete

No move assignment disguised as a copy assignment.

Deprecated:
(2018-02) can have unintended behaviour

◆ operator=() [4/5]

void operator= ( std::nullptr_t  )
inlinenoexcept

Reset via assignment from literal nullptr.

Definition at line 227 of file autoPtrI.H.

◆ set()

void set ( T p)
inlinenoexcept

Deprecated(2018-02) Identical to reset().

Note
Provided for backward compatibility - the older version enforced a run-time check (Fatal if pointer was already set) but this was rarely used.
Deprecated:
(2018-02) Identical to reset().

Definition at line 280 of file autoPtr.H.

Referenced by multiphaseSystem::dragCoeffs(), averageNeighbourFvGeometryScheme::movePoints(), and mappedPatchBase::readDatabase().

Here is the caller graph for this function:

◆ operator=() [5/5]

void operator= ( T p)
delete

Deprecated(2018-02) No copy assignment from plain pointer.

Deprecated:
(2018-02) Convenient, but uncontrolled access

◆ New() [2/2]

Foam::autoPtr<T> New ( Args &&...  args)
inline

Definition at line 36 of file autoPtrI.H.

◆ NewFrom() [2/2]

Foam::autoPtr<T> NewFrom ( Args &&...  args)
inline

Definition at line 44 of file autoPtrI.H.

◆ clone() [2/2]

Foam::autoPtr<T> clone ( Args &&...  args) const
inline

Definition at line 136 of file autoPtrI.H.


The documentation for this class was generated from the following files: