![]() |
От: |
Shmj
|
|
Дата: | 15.03.25 12:28 | ||
Оценка: |
![]() |
#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;
}
Constructor id=1
Destructor id=1
desctructed=false
test
Constructor id=1
Destructor id=1
desctructed=true
test
TrackedClass&& fun1() {
Wrapper w = Wrapper();
return std::move(w.take());
}