diff --git a/data/Data.cpp b/data/Data.cpp index 9c9f31a1..4b0337df 100644 --- a/data/Data.cpp +++ b/data/Data.cpp @@ -24,6 +24,17 @@ Data::Data(Data &&rhs) : _size(rhs._size), _data(rhs._data) { // Make rhs invalid, so the memory doesn't get freed in its destructor. rhs._data = nullptr; + rhs._size = 0; +} + +Data &Data::operator=(Data &&rhs) { + std::free(_data); + _data = rhs._data; + _size = rhs._size; + rhs._data = nullptr; + rhs._size = 0; + + return *this; } Data::~Data() { diff --git a/data/Data.h b/data/Data.h index 8fd6e383..c3ce72dd 100644 --- a/data/Data.h +++ b/data/Data.h @@ -13,9 +13,12 @@ namespace cpputils { class Data { public: explicit Data(size_t size); - Data(Data &&rhs); // move constructor virtual ~Data(); + Data(Data &&rhs); // move constructor + //TODO Test move assignment (and if not tested yet, also move constructor) + Data &operator=(Data &&rhs); // move assignment + Data copy() const; void *data();