diff --git a/src/OpenFOAM/containers/misc/xfer.H b/src/OpenFOAM/containers/misc/xfer.H index 2fec7405760bdd69fdcc711c3295b45f52f44669..6654ced746bfdab7e74245d02d4a444816332af2 100644 --- a/src/OpenFOAM/containers/misc/xfer.H +++ b/src/OpenFOAM/containers/misc/xfer.H @@ -60,18 +60,24 @@ class xfer //- Pointer to temporary object mutable T* ptr_; + // Private Member Functions + + //- Disallow default bitwise copy construct + xfer(const xfer<T>&); + public: // Constructors - //- Null constructor, transfer later by assignment + //- Null constructor + // Can be used later to transfer by assignment inline xfer(); - //- Construct by transferring the parameter contents into the object - inline xfer(T&); + //- Construct by copying or by transferring the parameter contents + inline xfer(T&, bool allowTransfer=false); - //- Construct by transferring the parameter contents into the object - inline xfer(const xfer<T>&); + //- Copy constructor + inline xfer(const T&); // Destructor diff --git a/src/OpenFOAM/containers/misc/xferI.H b/src/OpenFOAM/containers/misc/xferI.H index fa5d5fa1522e61977838f558f562d7ea59d6d893..f4f4b94197963ffbc2150670d034d43a801e0e03 100644 --- a/src/OpenFOAM/containers/misc/xferI.H +++ b/src/OpenFOAM/containers/misc/xferI.H @@ -34,20 +34,27 @@ inline Foam::xfer<T>::xfer() template<class T> -inline Foam::xfer<T>::xfer(T& t) +inline Foam::xfer<T>::xfer(T& t, bool allowTransfer) : ptr_(new T) { - ptr_->transfer(t); + if (allowTransfer) + { + ptr_->transfer(t); + } + else + { + ptr_->operator=(t); + } } template<class T> -inline Foam::xfer<T>::xfer(const xfer<T>& t) +inline Foam::xfer<T>::xfer(const T& t) : ptr_(new T) { - ptr_->transfer(*(t.ptr_)); + ptr_->operator=(t); }