2011-03-06 25 views
16

thể trùng lặp:
Do the parentheses after the type name make a difference with new?Không sử dụng dấu ngoặc trong cuộc gọi constructor với mới (C++)

Vì vậy, tôi đã có trong chính của tôi:

Class* pC = new Class; 

Nó được làm việc như

Class* pC = new Class(); 

Tôi nhận ra ngay hôm nay rằng tôi đã bỏ qua các dấu ngoặc đơn (vì vậy tôi đã bị tấn công bởi "đối diện" của phân tích cú pháp khó chịu nhất theo một cách).

Câu hỏi của tôi: Hai biểu mẫu này có tương đương không?

+0

Cả hai cuộc gọi đều gọi hàm khởi tạo mặc định. –

Trả lời

40

Nếu lớp có hàm tạo mặc định được xác định, thì cả hai đều tương đương nhau; đối tượng sẽ được tạo bằng cách gọi hàm tạo đó.

Nếu lớp chỉ có hàm tạo ngầm mặc định, thì có sự khác biệt. Việc đầu tiên sẽ để lại bất kỳ thành viên của POD loại uninitialised; giá trị thứ hai sẽ khởi tạo giá trị cho chúng (tức là đặt chúng thành 0).

+7

+1, không biết về sự khác biệt này. –

Các vấn đề liên quan