#include <iostream>
#include <bits/stdc++.h>
using namespace std;
class X {
public:
int a{0};
X() {
std::cout << "X constructor \n";
}
~X() {
std::cout << "X destructor \n";
}
X(const X& t)
{
a = t.a;
cout << "Copy constructor called " << endl;
}
X& operator=(const X& t)
{
a = t.a;
cout << "Copy assignment operator called " << endl;
return *this;
}
X(const X&& t)
{
a = std::move(t.a);
cout << "Move constructor called " << endl;
}
X& operator=(const X&& t)
{
a = std::move(t.a);
cout << "Move assignment operator called " << endl;
return *this;
}
};
std::function<void(int)> ff;
int main() {
{
auto x = std::make_shared<X>();
// const auto x = new X();
ff = [x](int t) {
std::cout << x->a << " " << t << "\n";
};
}
ff(1);
ff(2);
ff(3);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFggewoJcHVibGljOgoJCglpbnQgYXswfTsKCQoJWCgpIHsKCQlzdGQ6OmNvdXQgPDwgIlggY29uc3RydWN0b3IgXG4iOwoJfQoJCgl+WCgpIHsKCQlzdGQ6OmNvdXQgPDwgIlggZGVzdHJ1Y3RvciBcbiI7Cgl9CgkKCVgoY29uc3QgWCYgdCkKICAgIHsKICAgIAlhID0gdC5hOwogICAgICAgIGNvdXQgPDwgIkNvcHkgY29uc3RydWN0b3IgY2FsbGVkICIgPDwgZW5kbDsKICAgIH0KIAogICAgWCYgb3BlcmF0b3I9KGNvbnN0IFgmIHQpCiAgICB7CiAgICAJYSA9IHQuYTsKICAgICAgICBjb3V0IDw8ICJDb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3IgY2FsbGVkICIgPDwgZW5kbDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiAgICAKICAgIFgoY29uc3QgWCYmIHQpCiAgICB7CiAgICAJYSA9IHN0ZDo6bW92ZSh0LmEpOwogICAgICAgIGNvdXQgPDwgIk1vdmUgY29uc3RydWN0b3IgY2FsbGVkICIgPDwgZW5kbDsKICAgIH0KIAogICAgWCYgb3BlcmF0b3I9KGNvbnN0IFgmJiB0KQogICAgewogICAgCWEgPSBzdGQ6Om1vdmUodC5hKTsKICAgICAgICBjb3V0IDw8ICJNb3ZlIGFzc2lnbm1lbnQgb3BlcmF0b3IgY2FsbGVkICIgPDwgZW5kbDsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cn07CgpzdGQ6OmZ1bmN0aW9uPHZvaWQoaW50KT4gZmY7CgppbnQgbWFpbigpIHsKCXsKCQlhdXRvIHggPSBzdGQ6Om1ha2Vfc2hhcmVkPFg+KCk7CgkJLy8gY29uc3QgYXV0byB4ID0gbmV3IFgoKTsKCQlmZiA9IFt4XShpbnQgdCkgewoJCQlzdGQ6OmNvdXQgPDwgeC0+YSA8PCAiICIgPDwgdCA8PCAiXG4iOwoJCX07Cgl9CgkKCWZmKDEpOwoJZmYoMik7CglmZigzKTsKCXJldHVybiAwOwp9