#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;
}