当前位置:  开发笔记 > 编程语言 > 正文

复制构造器有什么问题?为什么要使用Cloneable接口?

如何解决《复制构造器有什么问题?为什么要使用Cloneable接口?》经验,为你挑选了1个好方法。

编程C++时,我们习惯于在需要时创建复制构造函数(或者我们被教导).几年前切换到Java时,我注意到现在正在使用Cloneable接口.C#遵循定义ICloneable接口的相同路由.在我看来,克隆是OOP定义的一部分.但我想知道,为什么创建这些接口,并且复制构造函数似乎已被删除?

当我想到它时,我开始认为如果需要复制一个类型未知的对象(如对基类型的引用),则复制构造函数将没有用处.这看似合乎逻辑.但我想知道是否还有其他原因我不知道,Cloneable接口是否比拷贝构造器更受青睐?



1> Johannes Sch..:

我认为这是因为Java和C#中的复制构造函数对于引用类型没有这种固有的需求.在C++中,对象被命名.你可以(并且你最常见)复制(并在C++中移动)它们,例如从函数返回时,因为返回指针需要你分配动态内存,这将是缓慢而痛苦的管理.语法是T(x),因此使构造函数采用T引用是有意义的.C++无法创建克隆函数,因为这需要再次按值返回一个对象(因此另一个副本).

但在Java中,对象是未命名的.只有对它们的引用,可以复制,但不复制对象本身.对于你真正需要复制它们的情况,你可以使用克隆调用(但我在其他文章中阅读克隆是有缺陷的.我不是java程序员所以我不能评论).由于不返回对象本身,而是返回对象的引用,因此克隆函数就足够了.还可以覆盖克隆功能.这不适用于复制构造函数.顺便说一句,在C++中,当你需要复制一个多态对象时,clone也需要一个函数.它有一个名字,即所谓的虚拟拷贝构造函数.


意外地指一个事件,意味着*无意中发生的事情*并且通常具有不受欢迎的含义; 顺便提一下,当提到一个事件时,意味着某些东西作为副产品发生并具有中性内涵.在上面的用法中,顺便说一下"顺便说一句",即作为附注,关注主题.
织补.我想最后我可以完成一个答案,而没有那个丑陋的"编辑"标签.呵呵谢谢你告诉我'回合:)
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有