#include <memory>

class MyClass
{
public:

    static std::shared_ptr<MyClass> create() {
        struct make_shared_enabler : public MyClass {};
        return std::make_shared<make_shared_enabler>();
    }

    friend class std::shared_ptr<MyClass>;
private:
   MyClass() {}
   ~MyClass() {}
};

int main() {
    auto p = MyClass::create();
}