#include <iostream>
#include <cstring>
using namespace std;
class ByteBuffer final
{
private:
char* buffer;
size_t size;
public:
size_t GetSize() const
{
return size;
}
const char* GetBuffer() const
{
return buffer;
}
char* GetBuffer()
{
return buffer;
}
ByteBuffer(size_t dataSize)
{
cout<<"uc";
buffer=new char[dataSize];
size=dataSize;
}
ByteBuffer(ByteBuffer& a){
cout<<"cc";
buffer=new char[a.size];
memcpy(buffer,a.buffer,a.size);
size=a.size;
}
ByteBuffer(ByteBuffer&& a)
{
cout<<"mc";
buffer=a.buffer;
a.buffer=nullptr;
size=a.size;
a.size=0;
}
~ByteBuffer() {
cout<<"de";
delete[] buffer;
}
ByteBuffer & operator = (ByteBuffer &a)
{
cout<<"ca";
delete[] buffer;
buffer=new char[a.size];
memcpy(buffer,a.buffer,a.size);
size=a.size;
return *this;
}
ByteBuffer & operator = (ByteBuffer &&a)
{
cout<<"ma";
delete[] buffer;
buffer=a.buffer;
a.buffer=nullptr;
size=a.size;
a.size=0;
return *this;
}
};
ByteBuffer func ()
{
return ByteBuffer(50);
}
int main()
{
ByteBuffer a(50);
ByteBuffer b(50);
cout<<"*";
b = func();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEJ5dGVCdWZmZXIgZmluYWwKewpwcml2YXRlOgogICAgY2hhciogYnVmZmVyOwogICAgc2l6ZV90IHNpemU7CnB1YmxpYzoKICAgIHNpemVfdCBHZXRTaXplKCkgY29uc3QKICAgIHsKICAgIAlyZXR1cm4gc2l6ZTsKICAgIH0KICAgIGNvbnN0IGNoYXIqIEdldEJ1ZmZlcigpIGNvbnN0CiAgICB7CiAgICAJcmV0dXJuIGJ1ZmZlcjsKICAgIH0KICAgIGNoYXIqIEdldEJ1ZmZlcigpCiAgICB7CiAgICAJcmV0dXJuIGJ1ZmZlcjsKICAgIH0KICAgIEJ5dGVCdWZmZXIoc2l6ZV90IGRhdGFTaXplKQogICAgewogICAgCWNvdXQ8PCJ1YyI7CiAgICAJYnVmZmVyPW5ldyBjaGFyW2RhdGFTaXplXTsKICAgIAlzaXplPWRhdGFTaXplOwogICAgfQogICAgQnl0ZUJ1ZmZlcihCeXRlQnVmZmVyJiBhKXsKICAgIAljb3V0PDwiY2MiOwogICAgCWJ1ZmZlcj1uZXcgY2hhclthLnNpemVdOwogICAgCW1lbWNweShidWZmZXIsYS5idWZmZXIsYS5zaXplKTsKICAgIAlzaXplPWEuc2l6ZTsKICAgIH0KICAgIEJ5dGVCdWZmZXIoQnl0ZUJ1ZmZlciYmIGEpICAKICAgIHsKICAgIAljb3V0PDwibWMiOwogICAgCWJ1ZmZlcj1hLmJ1ZmZlcjsKICAgIAlhLmJ1ZmZlcj1udWxscHRyOwogICAgCXNpemU9YS5zaXplOwogICAgCWEuc2l6ZT0wOwogICAgfQogICAgfkJ5dGVCdWZmZXIoKSB7CiAgICAJY291dDw8ImRlIjsKICAgICAgICBkZWxldGVbXSBidWZmZXI7CiAgICB9CiAgICBCeXRlQnVmZmVyICYgb3BlcmF0b3IgPSAoQnl0ZUJ1ZmZlciAmYSkKICAgIHsKICAgIAljb3V0PDwiY2EiOwogICAgCWRlbGV0ZVtdIGJ1ZmZlcjsKICAgIAlidWZmZXI9bmV3IGNoYXJbYS5zaXplXTsKICAgIAltZW1jcHkoYnVmZmVyLGEuYnVmZmVyLGEuc2l6ZSk7CiAgICAJc2l6ZT1hLnNpemU7CiAgICAJcmV0dXJuICp0aGlzOwogICAgfQogICAgQnl0ZUJ1ZmZlciAmIG9wZXJhdG9yID0gKEJ5dGVCdWZmZXIgJiZhKQogICAgewogICAgCWNvdXQ8PCJtYSI7CiAgICAJZGVsZXRlW10gYnVmZmVyOwogICAgCWJ1ZmZlcj1hLmJ1ZmZlcjsKICAgIAlhLmJ1ZmZlcj1udWxscHRyOwogICAgCXNpemU9YS5zaXplOwogICAgCWEuc2l6ZT0wOyAgICAKICAgIAlyZXR1cm4gKnRoaXM7CiAgICB9Cn07CgpCeXRlQnVmZmVyIGZ1bmMgKCkKewoJcmV0dXJuIEJ5dGVCdWZmZXIoNTApOwp9CiAKaW50IG1haW4oKQp7CiAgICBCeXRlQnVmZmVyIGEoNTApOwogICAgQnl0ZUJ1ZmZlciBiKDUwKTsgCiAgICBjb3V0PDwiKiI7CiAgICBiID0gZnVuYygpOwogICAgcmV0dXJuIDA7Cn0=