Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这两种初始化成员变量的方法之间有区别吗?_C++_Qt_Initialization - Fatal编程技术网

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

C++ 这两种初始化成员变量的方法之间有区别吗?,c++,qt,initialization,C++,Qt,Initialization,这两种方法都有效。上面的代码是QtCreator建议的,下面的代码是如果我必须自己写的话我会做的 Note的私人成员是 Note::Note(Traymenu *trayMenuIn, QWidget *parent) : ui(new Ui::Note){ ui->setupUi(this); Note::Note(Traymenu *trayMenuIn, QWidget *parent){ ui = new Ui::Note; ui->setu

这两种方法都有效。上面的代码是QtCreator建议的,下面的代码是如果我必须自己写的话我会做的

Note的私人成员是

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);

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


您应该更喜欢第一个表单(初始化)。请参阅相关的。

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


您应该更喜欢第一个表单(初始化)。请参阅相关的。

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


因为被初始化的成员是指针,所以即使关闭了优化,也不会有性能损失。但是,最好养成使用初始化列表尽可能多地初始化的习惯,因为这可以防止构造函数本身内部潜在的编码问题。

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


因为被初始化的成员是指针,所以即使关闭了优化,也不会有性能损失。但是,最好养成使用初始化列表尽可能多地初始化的习惯,因为这可以防止构造函数本身内部潜在的编码问题。

前者进行初始化,后者进行赋值(对于
ui
).但初始化不是与为声明的指针变量赋值完全相同吗?@user2366975否。前者在构造时,后者先进行默认构造,然后进行赋值。这是否会影响稳定性方面的实际使用,假设以后删除该对象?这是常量或引用成员唯一可能的方法。前者进行初始化,后者进行赋值(of
ui
)。但初始化与为声明的指针变量赋值不完全一样吗?@user2366975否。前者在构造时,后者先进行默认构造,然后进行赋值。它是否会影响稳定性方面的实际使用,比如稍后删除该对象?这是常量或引用成员唯一可能的方法。
Ui::Note *ui;