Perché i costruttori di copie non sono necessari per oggetti immutabili? Per favore, spiegami questo per me.Perché i costruttori di copie non sono necessari per oggetti immutabili?
risposta
Poiché il valore non può essere modificato, è altrettanto utile fare riferimento allo stesso oggetto in tutti i casi, non c'è bisogno di avere una "copia extra", per così dire.
+1 non ha senso avere due istanze di oggetti uguali e immutabili - basta usare la stessa istanza ovunque. – Grundlefleck
Questo è in qualche modo dipendente dalla lingua:
Tuttavia, molte lingue richiedono un costruttore di copia. Se non ne fornisci uno, la lingua genererà implicitamente uno.
Con un oggetto immutabile, tuttavia, questo in genere va bene, poiché il costruttore di copie predefinito (in genere) esegue una copia superficiale di tutti i valori. Con un tipo di dati mutevole (ad esempio: contenente riferimenti di oggetti interni ad altri oggetti), la copia superficiale è in genere una scelta sbagliata, poiché la copia copia solo il riferimento/puntatore incapsulato al suo interno.
La copia di oggetti immutabili non è ottimale: utilizza inutilmente risorse extra. Questo può o non può causare un problema a seconda della situazione, ma la copia di oggetti immutabili dovrebbe essere scoraggiata in generale. – Grundlefleck
Questa è una domanda dipendente dal linguaggio, specialmente per quanto riguarda la durata. Per un momento lasciamo perdere quelli.
I costruttori di copia sono preziosi in quanto consentono di prendere un oggetto e crearne una copia completamente indipendente. Questo è utile in quanto ora puoi modificare il secondo oggetto indipendentemente dal primo. Oppure un componente può creare una copia privata per proteggersi dagli altri componenti che cambiano l'oggetto da sotto di esso.
Gli oggetti non modificabili sono immutabili. Non c'è alcun valore nel creare una copia di un oggetto che non cambierà.
Ora lascia di nuovo la vita. In linguaggi come i costruttori di copie C++ consente inoltre di aggirare problemi di memoria/durata. Per esempio se sto scrivendo un'API che prende uno SomeType*
e voglio tenerlo in giro più a lungo della durata del mio metodo. In C++ il modo più affidabile per farlo è creare una copia dell'oggetto tramite un costruttore di copie.
è così naturale perché il valore dell'oggetto immutabile non può essere modificato.
Quindi perché viene utilizzato il metodo di clonazione? – Jothi
Possibile duplicato di [Che cosa rende gli oggetti immutabili da pubblicare senza tecniche di pubblicazione sicure?] (Http://stackoverflow.com/questions/17000617/what-makes-immutable-objects-to-be-published-without-safe-publication -tecniche) –