函数 / 构造函数 / 编程语言 · 2023年 10月 10日 0

构造函数和析构函数

82 次浏览

OOP编程语言依赖构造函数,不同语言构造函数语法要求不太相同,但大同小异。构造函数和初始化函数很类似,看透了,就是类似C语言初始化一个结构体变量。

默认构造函数

  • C++11之前,程序员增加新的带参数构造函数,必须手动编写空构造函数。C++11引入了default简化空构造函数实现。
    • 例如 A() = default;
    • 另外,还支持显式废弃构造函数,形如A() = delete指示编译器不要生成默认构造函数代码。
  • 在C++中,explicit修饰构造函数可以避免隐式的数值和对象转换,但它并不限制如下形式的强制类型转换:
    • Person p = (Person)12;
    • C++98不允许explicit用于转换函数,C++11消除了这个限制。

构造函数和析构函数名称

  • 大部分编程语言构造函数名称和类名相同,如C++/Java/C#等。
  • Python不太一样,用__init__作为默认构造函数。
  • PHP 用 __construct 作为构造函数名称,__destruct 作为析构函数。
  • 仓颉 init代表构造函数。

拷贝构造函数和赋值构造函数

  • C++是鲜有显式需要实现此二构造函数。

构造函数的重载

  • C++/仓颉 等均支持构造函数的重载。

移动语义

  • C++11引入移动语义std::move(),为配合右值引用而生,可节省对象构造拷贝开销。构造函数增加2个,分别是移动语义的拷贝构造函数和赋值构造函数。

类初始化器

  • 仓颉 提供类静态初始化器,和类相关,与对象无关。例如: static init() { ... }