#include <iostream>
#include <memory>
#include <cstdlib>

struct test {
    int x;
    std::string s;

    void* operator new( std::size_t size) {
        char * p = (char*) malloc( size );
        for ( std::size_t i = 0; i < size; ++i ) {
            p[i] = 0xba;
        }
        return p;
    }
    void operator delete(void* p) {
        free(p);
    }
};

void f() {
    test t;
    std::cout << t.x << std::endl;
    t.x = 5;
}

void g() {
    test t = test();
    std::cout << t.x << std::endl;
    t.x = 5;
}

int main() {
    std::auto_ptr<test> p1( new test );
    std::cout << std::hex << p1->x << std::endl;

    std::auto_ptr<test> p2( new test() );
    std::cout << std::hex << p2->x << std::endl;

    f(); f();
    g(); g();
}
