#include <iostream>
#include <utility>
class NamedBuffer
{
public:
NamedBuffer(char const *n, uint32_t s)
: name(n)
, size(s)
, buffer(new uint8_t[size])
{
this->info();
}
// move ctor
NamedBuffer(NamedBuffer && other) noexcept
: name(std::move(other.name))
, size(std::exchange(other.size, 0)) // std::exchange
, buffer(std::exchange(other.buffer, nullptr)) // ditto
{
// No assigment to members of source object
this->info();
}
NamedBuffer & operator=(NamedBuffer && other) noexcept
{
// ...
return *this;
}
~NamedBuffer()
{
delete [] buffer;
buffer = nullptr;
}
void info()
{
std::cout << "name : " << this->name << '\n';
std::cout << "size : " << this->size << '\n';
std::cout << "buffer : " << static_cast<void *>(this->buffer) << '\n';
std::cout << '\n';
}
// ...
private:
std::string name;
uint32_t size;
uint8_t *buffer; // raw pointer
// ...
};
int main()
{
constexpr char const *name = "TestBuffer";
constexpr uint32_t size = 1024;
NamedBuffer nb1(name, size);
NamedBuffer nb2 = std::move(nb1);
nb1.info();
}