Computer >> Máy Tính >  >> Lập trình >> C ++

Có sự khác biệt giữa khởi tạo sao chép và khởi tạo trực tiếp trong C ++ không?

Quá trình khởi tạo Copy có thể được thực hiện bằng cách sử dụng khái niệm về hàm tạo bản sao. Như chúng ta biết rằng các hàm tạo được sử dụng để khởi tạo các đối tượng. Chúng ta có thể tạo phương thức khởi tạo sao chép của mình để tạo bản sao của một số đối tượng khác, hay nói cách khác, khởi tạo đối tượng hiện tại với giá trị của đối tượng khác. Mặt khác, việc khởi tạo trực tiếp có thể được thực hiện bằng thao tác gán.

Sự khác biệt chính giữa hai kiểu khởi tạo này là việc khởi tạo sao chép tạo ra một khối bộ nhớ riêng cho đối tượng mới. Nhưng việc khởi tạo trực tiếp không tạo ra không gian bộ nhớ mới. Nó sử dụng biến tham chiếu để trỏ đến khối bộ nhớ trước đó.

Copy Constructor hoặc Copy Initialization (Cú pháp)

classname (const classname &obj) {
   // body of constructor
}

Toán tử chỉ định hoặc khởi tạo trực tiếp (Cú pháp)

classname Ob1, Ob2;
Ob2 = Ob1;

Hãy để chúng tôi xem sự khác biệt chi tiết giữa Khởi tạo sao chép và Khởi tạo trực tiếp.

Khởi tạo sao chép Khởi tạo Trực tiếp
Khởi tạo Copy về cơ bản là một hàm tạo được nạp chồng Khởi tạo trực tiếp có thể được thực hiện bằng cách sử dụng toán tử gán.
Điều này khởi tạo đối tượng mới với một đối tượng đã có sẵn Điều này chỉ định giá trị của một đối tượng cho một đối tượng khác, cả hai đều đã tồn tại.
Khởi tạo sao chép được sử dụng khi một đối tượng mới được tạo với một số đối tượng hiện có Điều này được sử dụng khi chúng ta muốn gán đối tượng hiện có cho đối tượng mới.
Cả hai đối tượng đều sử dụng các vị trí bộ nhớ riêng biệt. Một vị trí bộ nhớ được sử dụng nhưng các biến tham chiếu khác nhau đang trỏ đến cùng một vị trí.
Nếu không có phương thức tạo bản sao nào được xác định trong lớp, trình biên dịch sẽ cung cấp một phương thức khởi tạo. Nếu toán tử gán không bị quá tải thì bản sao theo chiều bit sẽ được tạo