Я работал над тем, чтобы предотвратить использование пользователем класса без интеллектуальных указателей. Таким образом, заставляя их обладать объектом, выделяемым и управляемым интеллектуальными указателями. Чтобы получить такой результат, я пробовал следующее:
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
Эта работа очень хорошо, если вы хотите, чтобы пользователи вашего класса могли манипулировать экземпляром вашего класса с помощью std::unique_ptr
. Но это не работает для std::shared_ptr
. Поэтому я хотел бы знать, есть ли у вас какие-либо идеи для такого поведения. Единственное решение, которое я нашел, делает следующее (использование friend std::allocator_traits<A>;
было недопустимым):
#include <memory>
class A
{
private :
~A {}
// For std::shared_ptr use with g++
friend __gnu_cxx::new_allocator<A>;
};
Но это решение не переносимо. Возможно, я делаю это неправильно.