Как заставить экземпляр класса только умные указатели?
Мы работаем над тем, чтобы запретить пользователю использовать класс без умных указателей. Таким образом, вынуждая их выделять кучу объектов и управлять ими с помощью интеллектуальных указателей. Чтобы получить такой результат, ямы пробовали следующее:
#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>
Но это решение не переносимо. Может я'Я делаю это неправильно.