Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa Copy Initialization và Direct Initialization trong C++


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ểmCopy InitializationDirect Initialization
Cú phápT x = a;T x(a); hoặc x = a (x đã tồn tại)
Cơ chếCopy constructorConstructor / Assignment operator
Bộ nhớObject mới, vùng nhớ riêngCó thể dùng chung vùng nhớ (reference)
Mặc định compilerTự 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).