C'è un motivo per cui lo unique_ptr::reset
non ha sovraccarichi che richiedono un valore const deleter&
e deleter&&
in modo che corrisponda ai suoi costruttori che accettano quelli come secondo argomento?Perché unique_ptr :: reset non ha sovraccarichi che richiedono un deleter?
La deleteria memorizzata in unique_ptr
verrebbe copiata o spostata assegnata con l'argomento da reset
. Se il deleter è noncopyable o nonmovable, la chiamata del sovraccarico corrispondente del reset
non verrà compilata. Sembra che sarebbe un comportamento coerente con i costruttori.
+1 per avere l'unica risposta _authoritative_ a una domanda "perché". – ildjarn
Non sarebbe più pulito e più coerente con shared_ptr se esistesse una funzione di reset? Per me, è particolarmente pulito quando si dispone di una funzione di cancellazione personalizzata. Ad esempio: 'ptr = unique_ptr (new_raw_ptr, deleter_function);' vs 'ptr.reset (new_raw_ptr, deleter_function);'. O meglio ancora se potessimo mantenere lo stesso deleter_function, quindi sarebbe come: 'ptr.reset (new_raw_ptr);'. –
felipou
@felipou: quest'ultimo funziona.Per il primo, ecco come * tu * puoi farlo accadere: http://cplusplus.github.io/LWG/lwg-active.html#submit_issue –