#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct A_s {
unsigned int l;
int *arr;
A_s(unsigned int size) : l(size), arr(new int[size])
{
cout<< "\t con addr: " << this << " Arr: " << arr <<endl;
}
A_s(const A_s &) = delete; // cannot copy
A_s& operator=(const A_s &) = delete; // cannot assign
A_s(A_s && src): l(src.l), arr(src.arr)
{
cout << "\t mov addr: " << this << " Arr: " << arr << " from " << &src <<endl;
src.arr = nullptr;
src.l = 0;
}
A_s& operator=(A_s && src)
{
std::swap(arr, src.arr);
std::swap(l, src.l);
cout << "\t ass addr: " << this << " Arr: " << arr << " from " << &src <<endl;
return *this;
}
~A_s() {
if (arr != nullptr)
{
cout << "\t des addr: " << this << " Arr: " << arr << endl;
}
delete[] arr; // works if line is removed
}
};
vector<A_s> vec;
int main() {
cout<<"vec 0"<<endl;
vec.emplace_back(1);
cout<<"vec 1"<<endl;
vec.emplace_back(1);
cout<<"vec 2"<<endl;
vec.emplace_back(1);
cout<<"vec 3"<<endl;
vec.emplace_back(1);
cout<<"Remove vec 1"<<endl;
vec.erase(vec.begin());
for(unsigned int i = 0; i < vec.size(); i++)
cout<< "addr: " << &vec[i] << " Arr: " << vec[i].arr <<endl;
cout<<"end"<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBBX3MgewogICAgdW5zaWduZWQgaW50IGw7CiAgICBpbnQgKmFycjsKCiAgICBBX3ModW5zaWduZWQgaW50IHNpemUpIDogbChzaXplKSwgYXJyKG5ldyBpbnRbc2l6ZV0pCiAgICB7CiAgICAgICAgY291dDw8ICJcdCBjb24gYWRkcjogIiA8PCB0aGlzIDw8ICIgQXJyOiAiIDw8IGFyciA8PGVuZGw7CiAgICB9CiAgICBBX3MoY29uc3QgQV9zICYpID0gZGVsZXRlOyAvLyBjYW5ub3QgY29weQogICAgQV9zJiBvcGVyYXRvcj0oY29uc3QgQV9zICYpID0gZGVsZXRlOyAvLyBjYW5ub3QgYXNzaWduCgogICAgQV9zKEFfcyAmJiBzcmMpOiBsKHNyYy5sKSwgYXJyKHNyYy5hcnIpCiAgICB7CiAgICAgICAgY291dCA8PCAiXHQgbW92IGFkZHI6ICIgPDwgdGhpcyA8PCAiIEFycjogIiA8PCBhcnIgPDwgIiBmcm9tICIgPDwgJnNyYyA8PGVuZGw7CiAgICAgICAgc3JjLmFyciA9IG51bGxwdHI7CiAgICAgICAgc3JjLmwgPSAwOwogICAgfQogICAgQV9zJiBvcGVyYXRvcj0oQV9zICYmIHNyYykKICAgIHsKICAgICAgICBzdGQ6OnN3YXAoYXJyLCBzcmMuYXJyKTsKICAgICAgICBzdGQ6OnN3YXAobCwgc3JjLmwpOwogICAgICAgIGNvdXQgPDwgIlx0IGFzcyBhZGRyOiAiIDw8IHRoaXMgPDwgIiBBcnI6ICIgPDwgYXJyIDw8ICIgZnJvbSAiIDw8ICZzcmMgPDxlbmRsOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIH5BX3MoKSB7CiAgICAgICAgaWYgKGFyciAhPSBudWxscHRyKQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCAiXHQgZGVzIGFkZHI6ICIgPDwgdGhpcyA8PCAiIEFycjogIiA8PCBhcnIgPDwgZW5kbDsKICAgICAgICB9CiAgICAgICAgZGVsZXRlW10gYXJyOyAgICAgICAgICAgICAgIC8vIHdvcmtzIGlmIGxpbmUgaXMgcmVtb3ZlZAogICAgfQp9OwoKdmVjdG9yPEFfcz4gdmVjOwoKaW50IG1haW4oKSB7CiAgICBjb3V0PDwidmVjIDAiPDxlbmRsOwogICAgdmVjLmVtcGxhY2VfYmFjaygxKTsKCiAgICBjb3V0PDwidmVjIDEiPDxlbmRsOwogICAgdmVjLmVtcGxhY2VfYmFjaygxKTsKCiAgICBjb3V0PDwidmVjIDIiPDxlbmRsOwogICAgdmVjLmVtcGxhY2VfYmFjaygxKTsKCiAgICBjb3V0PDwidmVjIDMiPDxlbmRsOwogICAgdmVjLmVtcGxhY2VfYmFjaygxKTsKCiAgICBjb3V0PDwiUmVtb3ZlIHZlYyAxIjw8ZW5kbDsKICAgIHZlYy5lcmFzZSh2ZWMuYmVnaW4oKSk7CgogICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7IGkrKykKICAgIGNvdXQ8PCAiYWRkcjogIiA8PCAmdmVjW2ldIDw8ICIgQXJyOiAiIDw8IHZlY1tpXS5hcnIgPDxlbmRsOwoKICAgIGNvdXQ8PCJlbmQiPDxlbmRsOwogICAgcmV0dXJuIDA7Cn0K