object class clone()方法具有本机实现,该实现创建子类的示例,并将源对象的状态复制到新创建的示例。问题:对象类的clone()方法不调用子类的构造函数,那么它如何创建子类的示例呢?
tyu7yeag1#
克隆是以依赖于实现的方式在jvm中实现的。在openjdk中,克隆实现为 jvm_clone 在jvm.cpp的第627行。这将为对象分配内存,并从调用它的对象复制数据。在jvm级别,创建示例和调用构造函数是两个独立的操作,因此本机实现不需要在创建示例之后调用任何构造函数。通过在c++中使用较低级别的jvm方法,它不需要调用构造函数。
jvm_clone
ltskdhd12#
你的定义是错误的。clone()方法不创建子类的示例,而是创建调用clone()方法的类的示例。此示例包含其所有当前值。因此,它不会调用子类构造函数,但是会调用自己类的构造函数。
2条答案
按热度按时间tyu7yeag1#
克隆是以依赖于实现的方式在jvm中实现的。在openjdk中,克隆实现为
jvm_clone
在jvm.cpp的第627行。这将为对象分配内存,并从调用它的对象复制数据。在jvm级别,创建示例和调用构造函数是两个独立的操作,因此本机实现不需要在创建示例之后调用任何构造函数。通过在c++中使用较低级别的jvm方法,它不需要调用构造函数。
ltskdhd12#
你的定义是错误的。clone()方法不创建子类的示例,而是创建调用clone()方法的类的示例。此示例包含其所有当前值。因此,它不会调用子类构造函数,但是会调用自己类的构造函数。