This class can be used for returning a value by copy. It relies
on the returned object exposing a swap(T&) method through
which the copy constructor and assignment operator are implemented,
thus resulting in actual move semantics. Typical use of this
class is along the following lines:
warning In order to avoid copies in code such as shown above,
the conversion from T to Disposable<T>
is destructive, i.e., it does not preserve the
state of the original object. Therefore, it is necessary
for the developer to avoid code such as
Disposable<Foo> bar(Foo& f){
return f;
}
which would likely render the passed object unusable.
The correct way to obtain the desired behavior would be:
generic disposable object with move semantics
This class can be used for returning a value by copy. It relies on the returned object exposing a swap(T&) method through which the copy constructor and assignment operator are implemented, thus resulting in actual move semantics. Typical use of this class is along the following lines:
Disposable<Foo> bar(Integer i) { Foo f(i*2); return f; }
warning In order to avoid copies in code such as shown above, the conversion from T to Disposable<T> is destructive, i.e., it does not preserve the state of the original object. Therefore, it is necessary for the developer to avoid code such as
Disposable<Foo> bar(Foo& f) { return f; }
which would likely render the passed object unusable. The correct way to obtain the desired behavior would be:
Disposable<Foo> bar(Foo& f) { Foo temp = f; return temp; }