#include <iostream>
#include <new>
#include <memory>
 
struct MyClass {
    MyClass () { std::cout << __func__ << std::endl; }
    ~MyClass () { std::cout << __func__ << std::endl; }
};
 
int main ()
{
    char mem[sizeof(MyClass)] alignas(MyClass);
    auto dtor = [](MyClass *p){ p->~MyClass(); };
    std::shared_ptr<MyClass> p(new (mem) MyClass, dtor);
}