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.

questionAnswers(2)

yourAnswerToTheQuestion