Il codice è giusto?Un unique_ptr dovrebbe avere un valore nullptr?
unique_ptr<A> p(new A());
p = nullptr;
Dovrei usare nullptr con un * * unique_ptr? o fallirà?
Lo provo su g ++, ma, che dire degli altri compilatori?
Il codice è giusto?Un unique_ptr dovrebbe avere un valore nullptr?
unique_ptr<A> p(new A());
p = nullptr;
Dovrei usare nullptr con un * * unique_ptr? o fallirà?
Lo provo su g ++, ma, che dire degli altri compilatori?
Funzionerà.
ai paragrafi 20.7.1.2.3/8-9 del C++ 11 standard sul modello unique_ptr<>
classe:
unique_ptr& operator=(nullptr_t) noexcept
;Effetti:
reset()
.Postcondizione:
get() == nullptr
Ciò significa che la definizione del modello di classe unique_ptr<>
comprende un sovraccarico di operator =
che accetta un valore di tipo nullptr_t
(come nullptr
) come suo lato destro; il paragrafo specifica inoltre che l'assegnazione di nullptr
a unique_ptr
equivale alla reimpostazione di unique_ptr
.
Quindi, dopo questa assegnazione, l'oggetto A
verrà distrutto.
Vedo. A proposito, solo nullptr ha nullptr_t, questo è il modo in cui è fatto, no? – Zhen
@Zhen: lo standard non lo specifica. Potresti creare una variabile di tipo 'nullptr_t', ma dubito che avrai mai bisogno di farlo. –