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;
}