Mi piacerebbe usare observer_ptr
nel mio progetto, ma lo paper definisce solo l'interfaccia, non l'implementazione completa. Esiste un'implementazione open source ora o devo farlo da solo?Esiste un'implementazione per observer_ptr adesso?
risposta
È possibile creare banalmente il cosiddetto observer_ptr
creando un unique_ptr
con un deleter NOP.
template<typename T>
struct nop_deleter
{
void operator()(T*) const {}
};
template<typename T>
using observer_ptr = unique_ptr<T, nop_deleter>;
Questo avrà ancora unique_ptr
's comportamento, che significa che è muoversi solo, mentre si vorrebbe observer_ptr
essere copiabile. Il che ci porta ad un'implementazione più semplice:
template<typename T>
using observer_ptr = T*;
Questo fa tutto ciò che vuoi. Puoi chiamarlo observer_ptr<int>
invece di int *
, perché quest'ultimo è, ovviamente, malvagio. È copiabile e non fa nulla alla distruzione.
che sto essendo faceto nella risposta di cui sopra, ma si spera, sarà dimostrare che observer_ptr
non ha molto di utilità oltre ad avere un nome diverso da un tipo di puntatore crudo. C'è niente di sbagliato nell'usare un puntatore raw non proprietario.
È possibile affermare che observer_ptr
trasmette l'intento, ma tale argomento è valido solo se il codice di base contiene istanze di puntatori non elaborati che gestiscono le risorse. Eliminare quelli e quindi un puntatore crudo significherà automaticamente observer_ptr
... senza il nome di fantasia.
Se è assolutamente necessario il nome di fantasia e/o un tipo distinto, implementarlo manualmente dovrebbe essere semplice.
Suppongo che una delle funzionalità richieste di observer_ptr sia la sua interfaccia compatibile con altri puntatori intelligenti standard (con metodi come reset, swap, get, probabilmente release) – lisyarus
Grazie mille :) La tua implementazione è elegante e il tuo pensiero è incredibile ! Non penso che l'uso di appuntamenti grezzi sia malvagio. Evita e usali solo quando è necessario perché sembra caos quando "unique_ptr
@lisyarus Sì, l'interfaccia è coerente con gli altri puntatori intelligenti, e forse ci sono occasioni in cui ne hai bisogno. Ma non ho ancora incontrato la necessità di operare genericamente su un tipo di puntatore intelligente senza la conoscenza della semantica della proprietà in gioco. Ma sono sicuro che un esempio forzato può essere cucinato dove ciò sarebbe utile. Tuttavia, in realtà, l'utilità sarebbe piuttosto limitata. – Praetorian
Sì: observer-ptr per C++ 98 in poi su GitHub.
- 1. commander.js - .prompt rimosso, e adesso?
- 2. Utilizzo di Redis per la funzionalità "trend adesso"
- 3. Query MongoDb per un valore datetime meno di adesso
- 4. Drools Fusion ha un concetto di "adesso"?
- 5. Postgres: timestamp più grande di adesso
- 6. find manca l'opzione -printf, e adesso?
- 7. remoteLink deprecato in Grails 2.4, e adesso?
- 8. Come ottenere 5 anni prima di adesso
- 9. Azure non risponde e/o è occupato, e adesso?
- 10. OpenCV e Computer Vision, dove ci troviamo adesso?
- 11. @property definizioni con ARC: è il default forte adesso?
- 12. La mia (enorme) applicazione lancia una OutOfMemoryException, e adesso?
- 13. Il quarzo non riesce a cancellare un lavoro, e adesso?
- 14. Quale versione di Ruby dovrei usare adesso (gennaio 2010)?
- 15. Esiste un'API per openstreetmap?
- 16. Esiste un'implementazione per SqlGeometryBuilder?
- 17. Esiste SourceMaps per HTML?
- 18. Esiste l'autoexpect per pexpect?
- 19. "Nessuna istanza per" l'errore - ma esiste l'istanza (tipo non corrisponde)
- 20. Il modo più veloce per verificare se esiste un oggetto
- 21. VimL: Verificando funzione esiste
- 22. Quale strumento di estrazione delle frasi è lo stato dell'arte adesso?
- 23. Esiste un podspec per Opencv?
- 24. Esiste un'alternativa SCP per PowerShell?
- 25. Esiste un'implementazione Erlang per Android?
- 26. Esiste un sostituto per mdbtools?
- 27. Esiste un #define per C99?
- 28. Esiste un interprete per C?
- 29. Esiste un'API per notebook IPython?
- 30. Esiste un CDN per jqGrid?
Dall'astratto non vedo molta differenza per un 'weak_ptr'. Modifica: la carta non menziona nemmeno 'weak_ptrs' ... WTH ?? – RedX
@RedX: weak_ptr richiede uno stato condiviso allocato e non sarà utilizzabile a meno che l'oggetto non sia di proprietà di shared_ptr. Quindi, la semantica e l'uso sembrano abbastanza diversi. – lisyarus
@RedX, 'weak_ptr' non può essere utilizzato su' unique_ptr'. – UniversE