Как заставить экземпляр класса только умные указатели?

Мы работаем над тем, чтобы запретить пользователю использовать класс без умных указателей. Таким образом, вынуждая их выделять кучу объектов и управлять ими с помощью интеллектуальных указателей. Чтобы получить такой результат, ямы пробовали следующее:

#include 
class A
{
private :
    ~A {}
    // To force use of A only with std::unique_ptr
    friend std::default_delete<a>;
};
</a>

Это работает очень хорошо, если вы хотите, чтобы пользователи вашего класса могли манипулировать экземпляром вашего класса черезstd::unique_ptr, Но это неработать наstd::shared_ptr, Так что я'Я хотел бы знать, если у вас есть какие-либо идеи, чтобы получить такое поведение. Единственное решение, которое яобнаружил, что делает следующее (используяfriend std::allocator_traits<a>;</a> было недостаточно)

#include 
class A
{
private :
    ~A {}
    // For std::shared_ptr use with g++
    friend __gnu_cxx::new_allocator<a>;
};
</a>

Но это решение не переносимо. Может я'Я делаю это неправильно.

Ответы на вопрос(2)

Ваш ответ на вопрос