#include <cstring>
#include <iostream>
#include <utility>
class MyClass {
public:
MyClass(size_t c): count(c) {
data = new int[count];
}
MyClass( MyClass&& src) : count(src.count) {
data = src.data;
src.count = 0;
src.data = nullptr;
}
void operator=( MyClass&& src) {
data = src.data;
count = src.count;
src.count = 0;
src.data = nullptr;
}
~MyClass() {
delete[] data;
}
int* get_data() const {
return data;
}
size_t get_count() const {
return count;
}
private:
MyClass(const MyClass& src) : count(src.count) {
data = new int[src.count];
memcpy(data, src.data, sizeof(int)*src.count);
}
void operator=(const MyClass& src) {
count = src.count;
data = new int[src.count];
memcpy(data, src.data, sizeof(int)*src.count);
}
int* data;
size_t count;
};
int main()
{
MyClass mc(150);
for (size_t i = 0; i < mc.get_count(); ++i)
mc.get_data()[i] = i;
MyClass mc2 = std::move(mc);
std::cout << "mc: " << mc.get_count() << '\n';
std::cout << "mc2: " << mc2.get_count() << '\n';
}
I2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHV0aWxpdHk+CgpjbGFzcyBNeUNsYXNzIHsKcHVibGljOgogICAgTXlDbGFzcyhzaXplX3QgYyk6IGNvdW50KGMpIHsKICAgICAgICBkYXRhID0gbmV3IGludFtjb3VudF07CiAgICB9CgoKCiAgICBNeUNsYXNzKCBNeUNsYXNzJiYgc3JjKSA6IGNvdW50KHNyYy5jb3VudCkgewogICAgICAgIGRhdGEgPSBzcmMuZGF0YTsKICAgICAgICBzcmMuY291bnQgPSAwOwogICAgICAgIHNyYy5kYXRhID0gbnVsbHB0cjsKICAgIH0KCiAgICB2b2lkIG9wZXJhdG9yPSggTXlDbGFzcyYmIHNyYykgewogICAgICAgIGRhdGEgPSBzcmMuZGF0YTsKICAgICAgICBjb3VudCA9IHNyYy5jb3VudDsKICAgICAgICBzcmMuY291bnQgPSAwOwogICAgICAgIHNyYy5kYXRhID0gbnVsbHB0cjsKICAgIH0KCgoKCiAgICB+TXlDbGFzcygpIHsKICAgICAgICBkZWxldGVbXSBkYXRhOwogICAgfQoKICAgIGludCogZ2V0X2RhdGEoKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CgogICAgc2l6ZV90IGdldF9jb3VudCgpIGNvbnN0IHsKICAgICAgICByZXR1cm4gY291bnQ7CiAgICB9Cgpwcml2YXRlOgoKICAgIE15Q2xhc3MoY29uc3QgTXlDbGFzcyYgc3JjKSA6IGNvdW50KHNyYy5jb3VudCkgewogICAgICAgIGRhdGEgPSBuZXcgaW50W3NyYy5jb3VudF07CiAgICAgICAgbWVtY3B5KGRhdGEsIHNyYy5kYXRhLCBzaXplb2YoaW50KSpzcmMuY291bnQpOwogICAgfQoKICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IE15Q2xhc3MmIHNyYykgewogICAgICAgIGNvdW50ID0gc3JjLmNvdW50OwogICAgICAgIGRhdGEgPSBuZXcgaW50W3NyYy5jb3VudF07CiAgICAgICAgbWVtY3B5KGRhdGEsIHNyYy5kYXRhLCBzaXplb2YoaW50KSpzcmMuY291bnQpOwogICAgfQoKCiAgICBpbnQqIGRhdGE7CiAgICBzaXplX3QgY291bnQ7Cn07CgoKaW50IG1haW4oKQp7CiAgICBNeUNsYXNzIG1jKDE1MCk7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1jLmdldF9jb3VudCgpOyArK2kpCiAgICAgICAgbWMuZ2V0X2RhdGEoKVtpXSA9IGk7CiAgICBNeUNsYXNzIG1jMiA9IHN0ZDo6bW92ZShtYyk7CiAgICAKICAgIHN0ZDo6Y291dCA8PCAibWM6ICIgPDwgbWMuZ2V0X2NvdW50KCkgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCAibWMyOiAiIDw8IG1jMi5nZXRfY291bnQoKSA8PCAnXG4nOwp9