Java 和 C++ copy constructor 之间的区别
difference between Java and 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;
}
...
}
我想从故事的编译器方面了解执行三个规则(复制构造函数、析构函数、赋值运算符(的逻辑的 Java 等效项。
复制构造函数如上。 实际上只是一个(简单的(设计模式。
Java 不提供等效的C++赋值运算符加载。 Java 支持基元类型和引用类型的赋值,但不支持像C++那样赋值对象。 在 Java 中分配值时需要特殊操作是不寻常的。 在需要这样做的情况下,习惯上将逻辑放入 setter 方法中。
Java 支持finalize
方法,这些方法在某些方面类似于C++析构函数。 主要区别在于finalize
方法是对对象的操作,而不是引用变量,并且通常在对象的最后一个引用超出范围后很长时间内调用它们。
但是,您很少需要使用finalize
方法:
Java是一种完全垃圾回收的语言,内存管理的最佳策略是让GC处理它。
其他资源最好使用"尝试/最终"或"尝试使用资源"进行管理。
AFAIK,finalize
方法的唯一合理用例是清理意外丢失的资源;例如,因为有人忘记使用推荐的机制"关闭"它们。
Java只有对对象的引用。不能声明内联(在堆栈上或在对象中(对象。
复制构造函数
Java没有。 你可以写一个,但很少这样做。
破坏者
Java没有。 它已经finalize()
,但这是非常不鼓励的。
赋值运算符
Java没有对象,只有对对象的引用。
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?