#include <iostream>
#include <vector>
class NonMovableAndCopyable
{
protected:
NonMovableAndCopyable()
{
std::cout << "NonMovableAndCopyable::NonMovableAndCopyable()\n";
}
~NonMovableAndCopyable() = default;
NonMovableAndCopyable & operator=(NonMovableAndCopyable &&) = delete;
};
class NamedBuffer
{
public:
NamedBuffer(char const *name, uint32_t size)
: name(name)
, buffer(size)
{
this->info();
std::cout << "NamedBuffer::NamedBuffer()\n";
}
void info()
{
std::cout << "name : " << this->name << '\n';
std::cout << "size : " << this->buffer.size() << '\n';
}
// ...
private:
std::string name;
std::vector<uint8_t> buffer;
// ...
};
class ExclusiveNamedBuffer : public NamedBuffer, private NonMovableAndCopyable
{
public:
ExclusiveNamedBuffer(char const *name, uint32_t size)
// Reverse order
: NonMovableAndCopyable()
, NamedBuffer(name, size)
{
// ...
}
// ...
};
int main()
{
constexpr char const *name = "TestBuffer";
constexpr uint32_t size = 1024;
ExclusiveNamedBuffer enb(name, size);
// ExclusiveNamedBuffer cenb = enb; // non-copyable
// ExclusiveNamedBuffer menb = std::move(enb); // non-movable
}