Copy initialization: Type obj = other; (dùng copy constructor). Tạo object mới, bộ nhớ riêng.
Direct initialization: Type obj(arg); hoặc obj = other (dùng assignment operator). Gán vào object đã tồn tại.
Bảng so sánh
| Đặc điểm | Copy Initialization | Direct Initialization |
|---|---|---|
| Cú pháp | T x = a; | T x(a); hoặc x = a (x đã tồn tại) |
| Cơ chế | Copy constructor | Constructor / Assignment operator |
| Bộ nhớ | Object mới, vùng nhớ riêng | Có thể dùng chung vùng nhớ (reference) |
| Mặc định compiler | Tự sinh copy ctor nếu chưa có | Bitwise copy nếu chưa overload = |
C++11: Type obj{arg}; (list initialization) ưu tiên constructor, hẹp chuyển đổi hẹp (narrowing).