为什么拷贝构造函数不需要一个不可改变的对象?
-
19-09-2019 - |
题
为什么复制构造不需要不变对象?请为我解释这一点。
解决方案
由于该值不能改变,它的每一样好引用同一个对象在所有情况下位,有没有必要有一个“额外的副本”,可以这么说。
其他提示
这是尤其相对于寿命的依赖于语言的问题。对于力矩让忘记那些。
拷贝构造函数,它们允许你拿一个对象,并创建它的一个完全独立的副本有价值。这是有价值的,你现在可以修改第二个对象独立之首。或组件可以创建一个私有副本,以保护自己免受其他组件从它下面改变对象的。
不可变对象是不可改变的。有创建一个对象,它不会改变的副本没有价值。
现在再让约一辈子的事情。在像C ++拷贝构造函数语言还允许您解决内存/寿命的问题。例如,如果我正在写,这需要SomeType*
的API,我想保持它周围的时间比我的方法的寿命。在C ++中最可靠的方法做,这是通过拷贝构造函数来创建对象的副本。
这是有点依赖于语言的:
然而,许多语言需要一个拷贝构造函数。如果你不提供一个语言将隐式生成一个。
使用一个不变的对象,但是,这通常是很好的,因为默认复制构造(典型地)执行所有值的浅表副本。用一个可变的数据类型(即:含有内的对象引用的其他对象),浅复制通常是不好的选择,因为拷贝被复制仅在其内封装在参考/指针
。它是如此自然的,因为不可变的对象的值不能被改变。
不隶属于 StackOverflow