2014-02-28 5 views
0
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에서 제안했습니다. 더 낮은 코드는 독자적으로 작성해야 할 경우입니다.이 두 가지 멤버 변수 초기화 방법에는 차이가 있습니까?

주의의 개인 회원

Ui::Note *ui; 
+2

전자는 초기화를 수행하고 후자는 할당 ('ui')을 수행합니다. – jrok

+0

그러나 선언 된 포인터 변수에 값을 할당하는 것과 똑같은 것을 초기화하지 않습니까? – user2366975

+1

@ user2366975 아니요. 전자는 * 건설 * 시간에 있고, 후자는 기본 구성을 거쳐 * 할당 *됩니다. – WhozCraig

답변

4

첫 번째 형태는 초기화입니다. 두 번째 형식은 ui을 정의되지 않은 값으로 초기화하고 값을 할당합니다.

은 첫 번째 양식 (초기화)을 선호합니다. 관련 C++ FAQ entry을 참조하십시오.

2

차이점은 적지 만 QtCreator에서 제안한 코드 스 니펫을 선호합니다. 초기화를 논리적으로 나타내는 코드의 할당 구문보다는 초기화 구문을 사용합니다.

초기화되는 멤버가 포인터이므로 최적화를 해제해도 성능이 저하되지 않습니다. 그러나 초기화 목록을 가능한 많이 초기화하는 습관을 갖는 것이 좋습니다. 이렇게하면 생성자 자체에서 잠재적 인 코딩 문제가 발생하지 않기 때문입니다.

관련 문제