Pracuję nad sposobem, aby uniemożliwić użytkownikowi korzystanie z klasy bez inteligentnych wskaźników. W ten sposób zmuszając ich do tego, aby obiekt był przydzielany do sterty i zarządzany przez inteligentne wskaźniki. W celu uzyskania takiego rezultatu, próbowałem następujące: Jak wymusić tylko instancję inteligentnych wskaźników dla klasy?
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
Ta praca dość dobrze, jeśli tylko chcą użytkownicy klasy zdolny do manipulowania instancji klasy przez std::unique_ptr
. Ale to nie działa dla std::shared_ptr
. Chciałbym wiedzieć, czy miałeś jakieś pomysły na takie zachowanie. Jedynym rozwiązaniem, które znalazłem robi co następuje (używając friend std::allocator_traits<A>;
był unsufficient):
#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śny. Może robię to w niewłaściwy sposób.
Ładne rozwiązanie ... OK, to nie będzie działać dla STL, ale zawsze chciałem tego dla mojej własnej implementacji SharedPtr i to rozwiązuje mój problem! – mmmmmmmm