Jak wymusić tylko instancję inteligentnych wskaźników dla klasy?
Pracowałem nad sposobem zapobiegania używaniu klasy bez inteligentnych wskaźników. Dlatego zmuszanie ich do przydzielania i zarządzania obiektami za pomocą inteligentnych wskaźników. Aby uzyskać taki wynik, próbowałem:
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
Działa to całkiem dobrze, jeśli chcesz, aby użytkownicy twojej klasy byli w stanie manipulować instancją klasystd::unique_ptr
. Ale to nie działastd::shared_ptr
. Chciałbym wiedzieć, czy masz jakieś pomysły na takie zachowanie. Jedyne rozwiązanie, które znalazłem, robi następujące rzeczy (używającfriend std::allocator_traits<A>;
było niewystarczające):
#include <memory>
class A
{
private :
~A {}
// For std::shared_ptr use with g++
friend __gnu_cxx::new_allocator<A>;
};
Ale to rozwiązanie nie jest przenośne. Może robię to w niewłaściwy sposób.