#pragma once class RC { public: RC() : _rc(new int[1]) { *_rc = 1; }; RC(const RC &r) noexcept : _rc(r._rc) { *_rc += 1; } RC(RC &&r) noexcept : _rc(r._rc) { } ~RC() { if (!--*_rc) delete[] _rc; }; int rc() { return *_rc; } bool last() { return *_rc == 1; } private: int* _rc; };