สองรูปแบบการ initialize object:
Copy Initialization
Type obj = value; // ใช้ copy/move constructor Type obj = other_obj; // copy initialization
- สร้าง temporary แล้ว copy/move (อาจ elided)
- ต้องมี accessible copy/move constructor
explicitconstructor ไม่สามารถใช้ได้
Direct Initialization
Type obj(value); // เรียก constructor โดยตรง
Type obj{value}; // C++11 uniform initialization
Type obj(other_obj); // direct initialization
- เรียก constructor ตรงๆ ไม่สร้าง temporary
- รองรับ explicit constructors
- มีประสิทธิภาพมากกว่าหรือเท่ากัน
ตารางเปรียบเทียบ
| ลักษณะ | Copy Init | Direct Init |
|---|---|---|
| Syntax | T x = a; | T x(a); หรือ T x{a}; |
| Explicit constructor | Error | OK |
| Temporary object | อาจสร้าง (copy elision) | ไม่สร้าง |
| Assignment operator | ไม่เกี่ยวข้อง | ไม่เกี่ยวข้อง (แต่ x = a ใช้ assignment) |
แนะนำ
ใช้ Direct initialization (uniform initialization {}) เป็นหลัก ป้องกัน narrowing conversions และรองรับ explicit constructors