#include <iostream>
#include <vector>
#include <string.h>
#include <memory>
using namespace std;
template< typename T >
struct array_deleter
{
void operator ()(T const * x) { delete[] x; }
};
class MemoryPage
{
size_t size;
std::shared_ptr<char> buf;
public:
explicit MemoryPage(int sz=8)
: size(sz)
, buf (new char[sz], array_deleter<char>())
{
std::cout<<"buffer='" << buf<<"'"<<" start address "<<(void *)buf.get()<<std::endl;
// std::cout<<"sz=" << size<<std::endl;
// for(size_t i=0;i <size; i++){
// buf[i]='a'+32/sz - 1 ;
// }
}
// ----- Деструктор вообще не нужон --------
// ~MemoryPage(){
// if(buf[0]!=null ) {
// std::cout<<"buffer='" << buf<<"'"<<" delete from address "<<(void *)buf.get()<<"\t"<< size<<" bytes "<<std::endl;
// delete[] buf;
// }
// }
};
using namespace std;
int main()
{
vector<MemoryPage> vm;
MemoryPage memoryPage(1024);
vm.push_back(MemoryPage(32));
vm.push_back(MemoryPage(16));
vm.push_back(MemoryPage(8));
cout<<" destroy vector "<< endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxtZW1vcnk+CnVzaW5nICBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpzdHJ1Y3QgYXJyYXlfZGVsZXRlcgp7CiAgdm9pZCBvcGVyYXRvciAoKShUIGNvbnN0ICogeCkgIHsgZGVsZXRlW10geDsgfQp9OwoKY2xhc3MgTWVtb3J5UGFnZQp7CiAgICBzaXplX3Qgc2l6ZTsKICAgIHN0ZDo6c2hhcmVkX3B0cjxjaGFyPiBidWY7CgogICAgcHVibGljOgogIGV4cGxpY2l0IE1lbW9yeVBhZ2UoaW50IHN6PTgpCiAgOiBzaXplKHN6KSAKICAsIGJ1ZiAobmV3IGNoYXJbc3pdLCBhcnJheV9kZWxldGVyPGNoYXI+KCkpCiAgewogICAgICAgc3RkOjpjb3V0PDwiYnVmZmVyPSciIDw8IGJ1Zjw8IiciPDwiIHN0YXJ0IGFkZHJlc3MgIjw8KHZvaWQgKilidWYuZ2V0KCk8PHN0ZDo6ZW5kbDsKICAgICAgIAogICAgICAgLy8gc3RkOjpjb3V0PDwic3o9IiA8PCBzaXplPDxzdGQ6OmVuZGw7CiAgICAgICAvLyBmb3Ioc2l6ZV90IGk9MDtpIDxzaXplOyBpKyspewogICAgICAgLy8gICAgYnVmW2ldPSdhJyszMi9zeiAtIDEgOwogICAgICAgLy8gfQogICAgIH0KICAgIAogICAgLy8gLS0tLS0g0JTQtdGB0YLRgNGD0LrRgtC+0YAg0LLQvtC+0LHRidC1INC90LUg0L3Rg9C20L7QvSAtLS0tLS0tLQogICAgLy8gfk1lbW9yeVBhZ2UoKXsKICAgIC8vICAgICBpZihidWZbMF0hPW51bGwgKSB7CiAgICAvLyAgICAgIHN0ZDo6Y291dDw8ImJ1ZmZlcj0nIiA8PCBidWY8PCInIjw8IiBkZWxldGUgZnJvbSAgYWRkcmVzcyAiPDwodm9pZCAqKWJ1Zi5nZXQoKTw8Ilx0Ijw8IHNpemU8PCIgYnl0ZXMgIjw8c3RkOjplbmRsOwogICAgLy8gICAgIGRlbGV0ZVtdIGJ1ZjsKICAgIC8vICAgIH0KICAgIC8vICB9CiAgfTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG1haW4oKQp7CiAgICB2ZWN0b3I8TWVtb3J5UGFnZT4gdm07CiAgICBNZW1vcnlQYWdlIG1lbW9yeVBhZ2UoMTAyNCk7CiAgICB2bS5wdXNoX2JhY2soTWVtb3J5UGFnZSgzMikpOwogICAgdm0ucHVzaF9iYWNrKE1lbW9yeVBhZ2UoMTYpKTsKICAgIHZtLnB1c2hfYmFjayhNZW1vcnlQYWdlKDgpKTsKICAgIGNvdXQ8PCIgZGVzdHJveSB2ZWN0b3IgIjw8IGVuZGw7Cn0K