Point p(5, 5); // ..or
Crea una variabile automatica "in pila". Ciò significa che è una durata e la memoria è fissa al suo ambito.
Point* p = new Point(5, 5);
Crea una perdita di memoria, doppia eliminazione o danneggiamento dell'heap nel programma. Ciò significa che quasi sicuramente il programma si bloccherà, causando la corruzione dei dati dell'utente o altri effetti collaterali divertenti . Ecco perché gli attuali programmatori C ++ usano alternative, come ...
auto p = make_unique<Point>(5, 5);
Crea un punto "sull'heap". In questo caso, è la durata e la memoria è fissa per la vita del proprietario unique_ptr<Point>
. Questa proprietà può essere trasferita spostando la semantica. Sfortunatamente, make_unique
non viene fornito come Standard (un difetto noto), ma è relativamente facile eseguire il rollover. È una semplice funzione di fabbrica.
auto p = std::make_shared<Point>(5, 5);
Crea anche un Punto "sull'heap". In questo caso, è la durata e la memoria è fissa per la durata di ogni shared_ptr<Point>
che punta ad esso. Quando sono tutti distrutti, Point
verrà ripulito. shared_ptr<Point>
può essere copiato, a differenza di unique_ptr<Point>
. Questo è molto simile al comportamento di Python. Tuttavia, non dimenticare che, diversamente da Python, non ci saranno macchinari per interrompere i cicli di riferimento.