Ho lavorato su un modo per impedire all'utente di utilizzare una classe senza puntatori intelligenti. Quindi, costringendoli a fare in modo che l'oggetto venga ammassato e gestito da puntatori intelligenti. Al fine di ottenere un risultato del genere, ho provato la seguente: Come forzare solo l'istanza di puntatori intelligenti per una classe?
#include <memory>
class A
{
private :
~A {}
// To force use of A only with std::unique_ptr
friend std::default_delete<A>;
};
Questo lavoro abbastanza bene se desideri solo gli utenti di classe di essere in grado di manipolare un'istanza della classe attraverso std::unique_ptr
. Ma non funziona per std::shared_ptr
. Quindi mi piacerebbe sapere se hai qualche idea per ottenere un simile comportamento. L'unica soluzione che ho trovato sta facendo la seguente (usando friend std::allocator_traits<A>;
era unsufficient):
#include <memory>
class A
{
private :
~A {}
// For std::shared_ptr use with g++
friend __gnu_cxx::new_allocator<A>;
};
Ma questa soluzione non è portatile. Forse lo sto facendo nel modo sbagliato.
Bella soluzione ... okay, questo non funzionerà per STL ma ho sempre voluto questo per la mia implementazione SharedPtr e questo risolve il mio problema! – mmmmmmmm