#include <iostream>
#include <thread>
using namespace std;
class A {
public:
A() {cout << "A: " << this << " A::A()" << endl;}
;A(int) {cout << "A: " << this << " A::A(int)" << endl;};
~A() {cout << "A: " << this << " A::~A()" << endl;};
};
void thf() {
static int n = 0;
n += 1;
cout << "\nthreads " << n << endl;
n -= 1;
return;
}
int main() {
const int thrn = 3;
thread *func_thread = new thread[thrn];
cout << "A *a = new A[thrn]" << endl;
A *a = new A[thrn];
cout << "A *a = new A[thrn]" << endl;
for(auto i = 0; i < thrn; i += 1) {
func_thread[i] = thread(thf);
cout << "a[i] = A(int)" << endl;
a[i] = A(5);
cout << "a[i] = A(int)" << endl;
}
cout << "CHECK" << endl;
for(auto i = 0; i < thrn; i += 1) {
auto &x = func_thread[i];
if(x.joinable()) {
x.join();
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEEgewoJcHVibGljOgoJQSgpIHtjb3V0IDw8ICJBOiAiIDw8IHRoaXMgPDwgIiBBOjpBKCkiIDw8IGVuZGw7fQoJO0EoaW50KSB7Y291dCA8PCAiQTogIiA8PCB0aGlzIDw8ICIgQTo6QShpbnQpIiA8PCBlbmRsO307Cgl+QSgpIHtjb3V0IDw8ICJBOiAiIDw8IHRoaXMgPDwgIiBBOjp+QSgpIiA8PCBlbmRsO307Cn07Cgp2b2lkIHRoZigpIHsKCXN0YXRpYyBpbnQgbiA9IDA7CgluICs9IDE7Cgljb3V0IDw8ICJcbnRocmVhZHMgIiA8PCBuIDw8IGVuZGw7CgluIC09IDE7CglyZXR1cm47Cn0KCmludCBtYWluKCkgewoJY29uc3QgaW50IHRocm4gPSAzOwoJdGhyZWFkICpmdW5jX3RocmVhZCA9IG5ldyB0aHJlYWRbdGhybl07CgkKCWNvdXQgPDwgIkEgKmEgPSBuZXcgQVt0aHJuXSIgPDwgZW5kbDsKCUEgKmEgPSBuZXcgQVt0aHJuXTsKCWNvdXQgPDwgIkEgKmEgPSBuZXcgQVt0aHJuXSIgPDwgZW5kbDsKCQoJZm9yKGF1dG8gaSA9IDA7IGkgPCB0aHJuOyBpICs9IDEpIHsKCQlmdW5jX3RocmVhZFtpXSA9IHRocmVhZCh0aGYpOwoJCQoJCWNvdXQgPDwgImFbaV0gPSBBKGludCkiIDw8IGVuZGw7CgkJYVtpXSA9IEEoNSk7CgkJY291dCA8PCAiYVtpXSA9IEEoaW50KSIgPDwgZW5kbDsKCX0KCQoJY291dCA8PCAiQ0hFQ0siIDw8IGVuZGw7CgkKCWZvcihhdXRvIGkgPSAwOyBpIDwgdGhybjsgaSArPSAxKSB7CgkJYXV0byAmeCA9IGZ1bmNfdGhyZWFkW2ldOwoJCWlmKHguam9pbmFibGUoKSkgewoJCQl4LmpvaW4oKTsKCQl9Cgl9CglyZXR1cm4gMDsKfQo=