Java 和 C++ copy constructor 之间的区别

difference between Java and C++ copy constructor

本文关键字:之间 区别 constructor copy C++ Java      更新时间:2023-10-16

我很好奇Java如何支持复制构造函数,它与C++有何不同?我想从故事的编译器方面了解执行三个规则(复制构造函数、析构函数、赋值运算符(的逻辑的 Java 等效项。

Java 对复制构造函数没有特定的语言支持。 相反,您只需在构造函数中手动编写状态复制代码;例如

public class Person {
    private String firstName;
    private String lastName;
    public Person(Person other) {
        this.firstName = other.firstName;
        this.lastName = other.lastName;
    }
    ...
}

我想从故事的编译器方面了解执行三个规则(复制构造函数、析构函数、赋值运算符(的逻辑的 Java 等效项。

复制构造函数如上。 实际上只是一个(简单的(设计模式。

Java 不提供等效的C++赋值运算符加载。 Java 支持基元类型和引用类型的赋值,但不支持像C++那样赋值对象。 在 Java 中分配值时需要特殊操作是不寻常的。 在需要这样做的情况下,习惯上将逻辑放入 setter 方法中。

Java 支持finalize方法,这些方法在某些方面类似于C++析构函数。 主要区别在于finalize方法是对对象的操作,而不是引用变量,并且通常在对象的最后一个引用超出范围后很长时间内调用它们。

但是,您很少需要使用finalize方法:

  • Java是一种完全垃圾回收的语言,内存管理的最佳策略是让GC处理它。

  • 其他资源最好使用"尝试/最终"或"尝试使用资源"进行管理。

AFAIK,finalize方法的唯一合理用例是清理意外丢失的资源;例如,因为有人忘记使用推荐的机制"关闭"它们。

Java只有对对象的引用。不能声明内联(在堆栈上或在对象中(对象。

复制构造函数

Java没有。 你可以写一个,但很少这样做。

破坏者

Java没有。 它已经finalize(),但这是非常不鼓励的。

赋值运算符

Java没有对象,只有对对象的引用。