#include <cstdlib>
#include <iostream>
#include <memory>
#include <new>
struct X
{
void *
operator new(
std::size_t count )
{
std::cout << "Custom new called." << std::endl;
return std::malloc( count );
}
void
operator delete(
void * addr )
{
std::cout << "Custom delete called." << std::endl;
return std::free( addr );
}
};
int
main( int, char ** )
{
std::cout << "std::make_shared" << std::endl;
{
std::make_shared<X>();
}
std::cout << "no std::make_shared" << std::endl;
{
std::shared_ptr<X>( new X() );
}
return 0;
}
I2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPG5ldz4KCnN0cnVjdCBYCnsKICAgIHZvaWQgKgogICAgb3BlcmF0b3IgbmV3KAogICAgICAgIHN0ZDo6c2l6ZV90IGNvdW50ICkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkN1c3RvbSBuZXcgY2FsbGVkLiIgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiBzdGQ6Om1hbGxvYyggY291bnQgKTsKICAgIH0KCiAgICB2b2lkCiAgICBvcGVyYXRvciBkZWxldGUoCiAgICAgICAgdm9pZCAqIGFkZHIgKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQ3VzdG9tIGRlbGV0ZSBjYWxsZWQuIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuIHN0ZDo6ZnJlZSggYWRkciApOwogICAgfQp9OwoKaW50Cm1haW4oIGludCwgY2hhciAqKiApCnsKICAgIHN0ZDo6Y291dCA8PCAic3RkOjptYWtlX3NoYXJlZCIgPDwgc3RkOjplbmRsOwogICAgewogICAgICAgIHN0ZDo6bWFrZV9zaGFyZWQ8WD4oKTsKICAgIH0KICAgIHN0ZDo6Y291dCA8PCAibm8gc3RkOjptYWtlX3NoYXJlZCIgPDwgc3RkOjplbmRsOwogICAgewogICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxYPiggbmV3IFgoKSApOwogICAgfQogICAgcmV0dXJuIDA7Cn0KCg==