复制构造函数应该有多深

Jav*_*per 5 java constructor deep-copy

  1. 是否应该为传递给构造函数的可变对象的对象引用设置防御副本?

  2. 如果是,那么我应该如何"深入"制作副本.在下面的示例中,我应该在所涉及的所有类的复制构造函数中进行深层复制吗?

例如:

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
   }
}
Run Code Online (Sandbox Code Playgroud)

3 ..如果有些课忘记实施深拷贝怎么办?这是否意味着我永远不会有一个安全的深度复制对象?有什么办法可以防止这个?

Boh*_*ian 5

你应该防守吗?
只有你需要.

你有多深?
尽可能深入.

声音陈腐?那么,这类问题的基本答案是"尽可能少地提供所需的功能".