I'm looking for patterns or for some ready to use solutions for next problem:
Container with features:
- One element of an arbitrary type storing
- When element is taken from container it gets empty
- When new element is stored, it overwrites previous content
- Thread safety
My naive implementation without thread safety:
template<typename T>
class Boxed {
    T* _data;
public:
    Boxed()
        : _data(nullptr)
    {}
    Boxed(const T& data)
        : _data(new T(data))
    {}
    ~Boxed() {
        if(_data != nullptr) {
            delete _data;
        }
    }
    inline
    void setData(const T& data) {
        if(_data != nullptr) {
            delete _data;
        }
        _data = new T(data);
    }
    inline
    T getData() {
        T res(*_data);
        delete _data;
        _data = nullptr;
        return res;
    }
    inline
    bool empty() const {
        return _data == nullptr;
    }
    inline
    operator bool() cons {
        return empty();
    }
};
I will be grateful for any help.
 
    