这两种初始化成员变量的方法之间有区别吗?

Is there a difference between these 2 methods of initialising member variables?

本文关键字:之间 有区别 方法 两种 初始化 成员 变量      更新时间:2023-10-16
Note::Note(Traymenu *trayMenuIn, QWidget *parent) :
    ui(new Ui::Note){
    ui->setupUi(this);
Note::Note(Traymenu *trayMenuIn, QWidget *parent){
    ui = new Ui::Note;
    ui->setupUi(this);

这两种类型都在起作用。上面的代码是QtCreator建议的,下面的代码是如果我必须自己编写它会做的事情。

Note的私人成员是

Ui::Note *ui;

只有第一种形式是初始化。第二种形式使用未定义的值初始化ui,然后为其赋值。

您应该首选第一种形式(初始化)。请参阅相关的C++常见问题解答条目。

虽然差异很小,但我更喜欢QtCreator建议的代码片段:它使用初始化语法而不是逻辑上表示初始化的代码的赋值语法。

由于正在初始化的成员是一个指针,因此即使关闭优化也不会降低性能。但是,最好养成尽可能多地使用初始化列表进行初始化的习惯,因为这可以防止构造函数本身内部的潜在编码问题。