gpt4 book ai didi

c# - 为什么构造函数总是与类同名,以及它们是如何被隐式调用的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:30 26 4
gpt4 key购买 nike

我想知道为什么构造函数的名称总是与类名相同,以及当我们创建该类的对象时如何隐式调用它。谁能解释一下这种情况下的执行流程?

最佳答案

I want to know that why the name of constructor is always same as that of class name

因为这种语法不需要任何新的关键字。除此之外,没有充分的理由。

To minimize the number of new keywords, I didn't use an explicit syntax like this:

class X {
constructor();
destructor();
}

Instead, I chose a declaration syntax that mirrored the use of constructors.

class X {
X();
~X();

This may have been overly clever. [The Design And Evolution Of C++, 3.11.2 Constructor Notation]


Can anyone please explain the flow of execution in such situation?

一个对象的生命周期可以这样总结:

  1. 分配内存
  2. 调用构造函数
  3. 使用对象
  4. 调用析构函数/终结器
  5. 释放内存

在 Java 中,第 1 步总是从堆中分配。在 C# 中,类也是从堆中分配的,而结构的内存已经可用(在非捕获本地结构的情况下在堆栈上或在它们的父对象/闭包中)。 Note that knowing these details is generally not necessary or very helpful .在C++中,内存分配极其复杂,这里不再赘述。

第 5 步取决于内存的分配方式。方法结束后,堆栈内存会自动释放。在 Java 和 C# 中,堆内存在不再需要后的某个未知时间由垃圾收集器隐式释放。在 C++ 中,堆内存在技术上是通过调用 delete 来释放的。 .在现代 C++ 中,delete很少被手动调用。相反,您应该使用 RAII 对象,例如 std::string , std::vector<T>std::shared_ptr<T>他们自己处理。

关于c# - 为什么构造函数总是与类同名,以及它们是如何被隐式调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com