#include <iostream>
using namespace std;
#include<iostream>
using namespace std;
class SmartPtr
{
private:
int *ptr; // Actual pointer
public:
explicit SmartPtr(int *p = NULL) { ptr = p; }
// Destructor
~SmartPtr() { delete(ptr); }
// Overloading dereferencing operator
int & operator *() { return *ptr; }
};
int main()
{
SmartPtr ptr(new int());
*ptr=2016;
cout << *ptr << endl;
// We don't need to call delete ptr: when the object
// ptr goes out of scope, destructor for it is automatically
// called and destructor does delete ptr.
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBTbWFydFB0cgp7CnByaXZhdGU6CiAgIGludCAqcHRyOyAgLy8gQWN0dWFsIHBvaW50ZXIKcHVibGljOgogICBleHBsaWNpdCBTbWFydFB0cihpbnQgKnAgPSBOVUxMKSB7IHB0ciA9IHA7IH0gCgogICAvLyBEZXN0cnVjdG9yCiAgIH5TbWFydFB0cigpIHsgZGVsZXRlKHB0cik7IH0gIAoKICAgLy8gT3ZlcmxvYWRpbmcgZGVyZWZlcmVuY2luZyBvcGVyYXRvcgogICBpbnQgJiBvcGVyYXRvciAqKCkgeyAgcmV0dXJuICpwdHI7IH0KfTsKCmludCBtYWluKCkKewogICAgU21hcnRQdHIgcHRyKG5ldyBpbnQoKSk7CiAgICAqcHRyPTIwMTY7CiAgICBjb3V0IDw8ICpwdHIgPDwgZW5kbDsKICAgCgogICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjYWxsIGRlbGV0ZSBwdHI6IHdoZW4gdGhlIG9iamVjdCAKICAgIC8vIHB0ciBnb2VzIG91dCBvZiBzY29wZSwgZGVzdHJ1Y3RvciBmb3IgaXQgaXMgYXV0b21hdGljYWxseQogICAgLy8gY2FsbGVkIGFuZCBkZXN0cnVjdG9yIGRvZXMgZGVsZXRlIHB0ci4KCiAgICByZXR1cm4gMDsKfQ==