#ifndef OBJECT_H_ #define OBJECT_H_ #include #include class Reference; class Object { public: Object(std::string const& str); std::string& data(); Reference get(); void increase(); void decrease(); int count() const; private: std::string str; int counter; }; class Reference { public: Reference(Object* object = nullptr); Reference(Reference const& other); Reference(Reference&& other); ~Reference(); Reference& operator=(Reference const& other); Reference& operator=(Reference&& other); std::string& data(); private: Object* object { nullptr }; }; #endif//OBJECT_H_