vendredi 18 mars 2016

One element size container with auto erasing, when data used, pattern

I'm looking for patterns or for some ready to use solutions for next problem:

Container with features:

  1. One element of an arbitrary type storing
  2. When element is taken from container it gets empty
  3. When new element is stored, it overwrites previous content
  4. 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.

Aucun commentaire:

Enregistrer un commentaire