Copy-On-Write
To support so-called Copy-On-Write constructions,
a template class COW is available to manage resources of
a given type T.
Copying a COW object is the same as cloning the resource.
So, when you want to modify the resource, be careful on which
COW object you acquire the resource. If that is a temporary
COW object, the resource will be cloned in the temporary
object upon write, but the modified resource will subsequently be deleted if the
temporary COW object is destroyed.
Interface
The class definition is:
template <class T>
class COW;
The COW has the following interface:
COW(T *resource) |
Create a Copy-On-Write object that will manage the given resource.
Do not delete the given pointer or modify the resource through
the supplied pointer! |
const T &operator() const |
Returns a const reference to the resource that is potentially shared. |
T &operator() |
Returns a reference to the resource that is guaranteed not to be shared. |
bool operator==(const COW &that) const |
Returns true if two COWs are managing the same resource. |
bool operator!=(const COW &that) const |
Returns true if two COWs are notmanaging the same resource. |
Example
#include <cassert>
#include <cvmlcpp/base/COW>
int main()
{
using namespace cvmlcpp;
COW<int> a(new int(3));
assert(a() == 3);
COW<int> b = a;
assert(a == b);
b() = 7;
assert(a() == 3 && b() == 7);
assert(a != b);
return 0;
}
|