Dovrebbero i copie difensive sempre essere fatte per riferimenti a oggetti di oggetti mutabili passati a costruttori?Come profondo dovrebbe copiare costruttori ottengono
Se sì, allora quanto "profondo" dovrei andare a fare copie. Nel seguente esempio dovrei creare copie profonde all'interno dei costruttori di copia di tutte le classi coinvolte?
Esempio:
class Graph {
AdjacencyList;
public Graph(Graph graph) {
this.list = graph.list; // shallow copy
OR
this.list = ArrayCopy(graph.list); // deep copy
}
}
class DFS implements GraphAlgo {
Graph g
DFS(Graph g) {
this.g = g; // shallow copy
OR
this.g = new Graph(graph) // deep copy
}
DFS(Algo algo) {
this.g = algo.g; // shallow copy
OR
this.g = new Graph(algo.g); // deep copy
}
}
class Algo {
GraphAlgo galgo
Algo (GraphAlgo dfsalgo) {
galgo = dfsalgo // shallow copy
OR
galgo = new DFSAlgo(dfsalgo); // deep copy
}
}
3 .. E se qualche classe dimentica di implementare copia completa? Significa che non avrò mai un oggetto protetto in profondità? Un modo per prevenire questo?
Non osare! Fare riferimento a http://stackoverflow.com/q/2156120/1065197 –
Un'obbligazione per "preferire l'immutabilità", quindi non è necessario preoccuparsi di questo genere di cose. –