java - Java和C++拷贝构造函数的区别

标签 java c++ copy-constructor

我很好奇 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;
    }
    ...
}

I would like to understand the Java equivalent of the logic to execute rule of three (copy constructor, destructor, assignment operator) from the compiler side of the story.

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

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

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

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

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

  • 其他资源最好使用“try/finally”或“try with resources”来管理。

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

关于java - Java和C++拷贝构造函数的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19062702/

相关文章:

java - Spring Boot Admin重启后未检测到服务

java - 除了 XPath 之外,在 selenium webdriver 中定位元素的最佳方法是什么?

C++ 尝试制作游戏,但在 while 循环中返回函数值时遇到问题。将不胜感激

c++ - Netbeans "__cplusplus"定义错误

c++ - 使用指针和结构复制类的构造函数

java - 从 LStbox ZK 中的多项选择中获取值

java - 如何在主类中调用比较器

c++ - Visual Studio 包含来自其他项目的 cpp 文件

c++ - 使用另一个(现有)对象创建新对象时会发生什么?

c++将实例复制构造到 map 中