{}
run-icon
main.cpp
#include <iostream> class TrackedClass { private: int _id; bool _isDesctructed = false; public: // Default constructor TrackedClass() { std::cout << "Default constructor\n"; } TrackedClass(int id) : _id(id) { std::cout << "Constructor id=" << id << "\n"; } // Destructor ~TrackedClass() { _isDesctructed = true; std::cout << "Destructor id=" << _id << "\n"; } // Copy constructor TrackedClass(const TrackedClass& other) { std::cout << "Copy constructor\n"; } // Move constructor TrackedClass(TrackedClass&& other) noexcept { std::cout << "Move constructor\n"; } // Copy assignment operator TrackedClass& operator=(const TrackedClass& other) { std::cout << "Copy assignment operator\n"; return *this; } // Move assignment operator TrackedClass& operator=(TrackedClass&& other) noexcept { std::cout << "Move assignment operator\n"; return *this; } void test() { std::cout << "desctructed=" << (_isDesctructed ? "true" : "false") << std::endl; } }; class Wrapper { private: TrackedClass _trackedClass; public: Wrapper() : _trackedClass(1) { } TrackedClass&& take() { return std::move(_trackedClass);; } }; TrackedClass&& fun1() { Wrapper w = Wrapper(); return w.take(); } int main(int argc, const char * argv[]) { TrackedClass&& t = fun1(); t.test(); std::cout << "test" << std::endl; }
Output