La proposta N4282 richiede un nuovo tipo di puntatore intelligente non proprietario denominato observer_ptr
. Il suo nome di lavoro era exempt_ptr
ed è inteso come una sostituzione per "puntatori grezzi". Ma non capisco il suo scopo, in particolare con questo ipotetico codice per quello che è stato progettato per ottenere:Qual è il punto di "Il puntatore intelligente più stupido del mondo?"
struct do_nothing
{
template <class T>
void operator()(T*) { }; // do nothing
};
template <class T>
using non_owning_ptr = unique_ptr<T, do_nothing>;
Anche dopo aver letto l'articolo, non capisco lo scopo di un puntatore intelligente che non fa Niente. Che vantaggio ha su un puntatore non proprietario shared_ptr
o raw?
Consente di scrivere codice corretto tramite analisi statica. Ad esempio, se per errore chiami 'delete' su uno di essi, il compilatore ti darà un errore, impedendoti di liberare memoria che non possiedi. –