- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想知道为什么构造函数的名称总是与类名相同,以及当我们创建该类的对象时如何隐式调用它。谁能解释一下这种情况下的执行流程?
最佳答案
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?
一个对象的生命周期可以这样总结:
在 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/
我是一名优秀的程序员,十分优秀!