- Codice:
Create A
Create A
Create A
Destroy A
Destroy A
Hai insomma eliminato la creazione e distruzione dell'oggetto third ottenendo 3 chiamate al construttore e due al distruttore (e nessuna al costruttore di copia che veniva usato per third).
Se allochi della memoria in una funzione che deve essere deallocata al di fuori di essa hai le seguenti opzioni:
1. Restituire un puntatore a tale memoria. Il codice che fa uso della funzione si deve ricordare di deallocare tale memoria.
2. Restituire la memoria usando uno smart pointer (shared_ptr o unique_ptr).
In linea di massima, quando si ha a che fare con un container di qualche tipo è difficile che uno si metta a definire una funzione come operator- a meno di copiare il container (eventualmente usando la move semantic). L'alternativa più comune è quella di richiedere il passaggio (per riferimento) di un container o un iteratore da usare come output. A tale proposito considera la funzione set_difference in algorithm. L'output è scritto su un output iterator (un iteratore che permette la scrittura nella posizione corrente e l'incremento).