将对象副本传递给方法 - 谁进行复制?

JW.*_*JW. 5 oop

我有一个对象,我正在传递一个方法调用.假设我使用的语言只允许您通过引用传递对象,如Java或PHP.如果方法更改了对象,则会影响调用者.我不希望这种情况发生.所以我似乎需要制作一个对象的副本.

我的问题是:克隆对象的责任是什么?调用者在调用方法之前?或者被调用者,在它改变对象之前?

编辑:只是为了澄清,我希望这是这个方法的合同的一部分 - 它永远不会修改原始对象.因此,似乎应该由制作副本的方法决定.但是,调用者无法保护不能正确执行此操作的方法.我想这是可以接受的 - 唯一的另一种选择似乎就是把它融入到语言中.

Joe*_*ora 6

通常,如果调用者关心更改,则应该进行复制.如果调用者不关心,则该方法应该在需要执行它知道不应该持久的操作时进行复制.


tlo*_*ach 0

取决于,是否有任何原因可以在您希望调用者看到更改的情况下调用该方法?如果是这样,那么调用者应该制作副本。否则被调用者应该成功。我想说第二种情况可能更常见。