Listing 3: Implementing the InValueContainer context.
class InValueContainer {
public:
InValueContainer(): _ownerCount(new size_t(1)) {}
InValueContainer(const InValueContainer& rhs)
: _ownerCount(rhs._ownerCount)
{
(*_ownerCount) ++;
}
void operator=(const InValueContainer& rhs)
{
clearCount();
_ownerCount = rhs._ownerCount;
(*_ownerCount) ++;
}
~InValueContainer() { clearCount(); }
bool soleOwner() const {return ((*_ownerCount) == 1);}
private:
void clearCount()
{
if ((--(*_ownerCount)) <= 0)
delete _ownerCount;
}
private:
size_t* _ownerCount;
}