Sự khác biệt giữa Con Contor và Destructor

Tác Giả: Laura McKinney
Ngày Sáng TạO: 1 Tháng Tư 2021
CậP NhậT Ngày Tháng: 4 Có Thể 2024
Anonim
Sự khác biệt giữa Con Contor và Destructor - Công Nghệ
Sự khác biệt giữa Con Contor và Destructor - Công Nghệ

NộI Dung


Hàm xây dựng và hàm hủy là các hàm thành viên có cùng tên với lớp của chúng. Kiểu cũ constructor giúp khởi tạo một đối tượng. Ngược lại, một kẻ hủy diệt khác với hàm tạo sẽ xóa hàm tạo đã tạo khi không sử dụng.

Đôi khi nó được yêu cầu khởi tạo một phần của một đối tượng trước khi nó có thể được sử dụng. Ví dụ: chúng tôi đang hoạt động trên ngăn xếp, trước khi chúng tôi thực hiện bất kỳ hành động nào, đỉnh của ngăn xếp phải luôn được đặt thành không. Tính năng khởi tạo tự động này được thực hiện thông qua ‘Trình xây dựng. Giống như, nếu một đối tượng cần thực thi một số mã trước khi nó bị phá hủy. Ví dụ, nếu một đối tượng cần đóng một tệp mà nó đã mở, trước khi hủy. Nó có thể được thực hiện với sự trợ giúp của ‘Destructor.


Hãy để tổng quan về một số khác biệt cơ bản giữa hàm tạo và hàm hủy với sự trợ giúp của biểu đồ so sánh

  1. Biểu đồ so sánh
  2. Định nghĩa
  3. Sự khác biệt chính
  4. Phần kết luận

Biểu đồ so sánh:

Cơ sở để so sánhConstructorPhá hủy
Mục đích

Nó phân bổ bộ nhớ cho một đối tượng.Nó giải phóng bộ nhớ của một đối tượng.
Tờ khai class_name (đối số nếu có) {};~ class_name (không có đối số) {};
Tranh luận Người xây dựng chấp nhận đối số Destructor không chấp nhận bất kỳ đối số.
Gọi điện thoạiTrình xây dựng được gọi tự động, trong khi đối tượng được tạo.Destructor được gọi tự động, khi khối được thoát hoặc chương trình kết thúc.
Đang làm việcCon constructor cho phép một đối tượng khởi tạo một số giá trị của nó trước đó, nó được sử dụng.Destructor cho phép một đối tượng thực thi một số mã tại thời điểm phá hủy của nó.
Lệnh thi hành án

Con Contor được gọi theo thứ tự liên tiếp.
Destructor được gọi theo thứ tự ngược của hàm tạo.
Bằng số Có thể có nhiều constructor trong một lớp.Luôn có một hàm hủy duy nhất trong lớp.
Sao chép xây dựng Copy constructor cho phép một constructor khai báo và khởi tạo một đối tượng từ một đối tượng khác.Không có khái niệm như vậy.
Quá tải Nhà xây dựng có thể bị quá tải.Destructor không thể bị quá tải.


Định nghĩa của Con Contortor:

Một constructor về cơ bản là một hàm thành viên của lớp, nó khởi tạo đối tượng và phân bổ bộ nhớ cho nó. Các nhà xây dựng có thể dễ dàng được xác định khi chúng được khai báo và định nghĩa với cùng tên với tên của lớp. Một constructor không có bất kỳ kiểu trả về; vì vậy, họ không trả lại bất cứ thứ gì, thậm chí không phải là void void. Một Con Contor luôn được định nghĩa trong phần chung của một lớp.

Có thể có nhiều constructor trong một lớp; chúng có thể được phân biệt dựa trên số lượng và loại đối số được thông qua. Nếu có nhiều constructor trong một lớp; hàm tạo ngầm định (hàm tạo không làm gì) phải được định nghĩa cùng với chúng; nó không làm gì ngoài việc thỏa mãn trình biên dịch.

Con constructor cũng có thể được định nghĩa với các đối số mặc định. Trong khi đó, họ cũng khởi tạo đối tượng động một cách linh hoạt. Các nhà xây dựng không thể được thừa kế, cũng không thể là ảo nhưng chúng có thể bị quá tải. Họ có thể được giới thiệu đến địa chỉ của họ.

Các loại nhà xây dựng

Về cơ bản có ba loại hàm tạo - Mặc định, Tham số hóa và Sao chép Trình xây dựng.

  • Nhà xây dựng mặc định: Nó là một hàm tạo trong đó không có đối số nào được đưa ra cho hàm tạo. Trình xây dựng mặc định không có tham số, nhưng các giá trị cho hàm tạo mặc định có thể được truyền theo mặc định (động).
  • Xây dựng tham số: Kiểu xây dựng này lấy các đối số; chúng ta có thể truyền các giá trị khác nhau cho các thành viên dữ liệu dưới dạng đối số.
  • Sao chép xây dựng: Copy constructor khác với các loại constructor khác vì nó chấp nhận địa chỉ của đối tượng khác làm đối số.

Thực hiện xây dựng:

lớp Const {int a, b; công khai: Const () // hàm tạo không có tham số {a = 0; b = 0; } Const (int c, int d) {// hàm tạo với tham số a = c; c = d; }}; int main () {Const C1; C2 (10,20); // câu lệnh này gọi hàm tạo}

Khi C1 được tạo, một hàm tạo không có tham số nào được thực thi, vì C1 không vượt qua bất kỳ tham số nào. Trong khi đó, khi C2 được tạo, một hàm tạo có tham số được thực thi, vì nó đang truyền hai số nguyên cho hàm tạo.

Định nghĩa của Destructor:

Một Phá hủy cũng là một hàm thành viên của một lớp, nó sẽ giải phóng bộ nhớ được phân bổ cho một đối tượng. Nó được định nghĩa với cùng tên với tên của một lớp, trước một dấu ngã (~) Biểu tượng. Các cấu trúc phá hủy luôn được gọi theo thứ tự ngược lại của các nhà xây dựng.

Luôn có một hàm hủy duy nhất trong một lớp, vì nó không chấp nhận bất kỳ đối số nào. Các đối tượng cục bộ bị phá hủy ngay khi quyền kiểm soát thực thi làm mất khối; mặt khác, các đối tượng toàn cầu bị phá hủy khi toàn bộ chương trình kết thúc. Một hàm hủy được gọi ngầm bởi trình biên dịch. Nếu các lớp được kế thừa và một lớp có nguồn gốc từ một lớp cha và cả lớp con và lớp cha đều có hàm hủy; sau đó, hàm hủy của lớp dẫn xuất được gọi đầu tiên, theo sau là hàm hủy của lớp cha.

Thực hiện Destructor:

lớp Const {int a, b; công khai: Const (int c, int d) // constructor với tham số. {a = c; c = d; cout << "giá trị của a và b là" <<>

Khi đối tượng C1 được tạo, một hàm tạo có hai tham số kiểu nguyên được gọi và thành viên Rơ a, bv được khởi tạo và giá trị của một a, bv là ed. Sau đó, hàm hủy được gọi và đối tượng C1 bị phá hủy.

Cần hủy diệt

Việc tạo ra hàm tạo sẽ tiêu tốn một lượng không gian bộ nhớ, vì cuối cùng nó phân bổ bộ nhớ cho các đối tượng. Bộ nhớ được phân bổ này phải được giải quyết trước khi phá hủy các đối tượng để giải phóng tài nguyên cho các nhiệm vụ khác. Dest phá hủy là cực kỳ hữu ích cho mục đích dự định, giúp phá hủy hiệu quả các đối tượng và thực hiện các nhiệm vụ dọn dẹp để giải phóng bộ nhớ.

  1. Mục đích chính của một constructor là phân bổ bộ nhớ cho các đối tượng khi chúng được tạo. Như chống lại, mục đích chính của một kẻ hủy diệt là để giải phóng bộ nhớ của đối tượng khi nó bị phá hủy.
  2. Một constructor được phép chấp nhận các đối số vì các đối số có thể được sử dụng để khởi tạo các thành viên dữ liệu của lớp. Mặt khác, một hàm hủy không chấp nhận bất kỳ đối số nào vì công việc duy nhất của nó là giải phóng bộ nhớ của đối tượng.
  3. Một constructor được gọi khi một đối tượng được tạo. Ngược lại, một hàm hủy được gọi khi một chương trình bị chấm dứt hoặc chương trình thoát khỏi khối trong đó một đối tượng được tạo.
  4. Một constructor thường được sử dụng để khởi tạo các thành viên dữ liệu của lớp, trong khi đó một hàm hủy được sử dụng để cho đối tượng thực hiện một số hành động trước khi nó bị phá hủy.
  5. Các hàm xây dựng được thực hiện theo thứ tự liên tiếp có nghĩa là nếu có một lớp dẫn xuất kế thừa lớp cơ sở và đối tượng của lớp dẫn xuất được tạo thì nó sẽ gọi hàm tạo của lớp cơ sở trước và sau đó là hàm tạo của lớp dẫn xuất. Ngược lại, hàm hủy của lớp dẫn xuất được gọi đầu tiên và sau đó là lớp cơ sở, điều đó có nghĩa là hàm hủy được thực thi theo thứ tự ngược lại của hàm tạo.
  6. Trong lớp, có thể có nhiều hàm tạo được xác định bởi các đối số số được truyền trong khi nó chỉ có thể có một hàm hủy.
  7. Có một khái niệm về constructor sao chép cho phép một đối tượng được khởi tạo từ một đối tượng khác trong khi hàm hủy không có khái niệm đó.
  8. Các nhà xây dựng có thể bị quá tải để thực hiện các hành động khác nhau dưới tên của cùng một nhà xây dựng. Ngược lại, các tàu khu trục không thể bị quá tải.

Phần kết luận:

Bên cạnh sự giống nhau, hàm tạo và hàm hủy đó là hàm thành viên đặc biệt của một lớp và có cùng tên, sự khác biệt cơ bản giữa cả hai là, 'hàm tạo' được gọi tại thời điểm cấp phát bộ nhớ và 'hàm hủy' được gọi tại thời gian giải quyết bộ nhớ đối tượng. Cả hàm tạo và hàm hủy đều được trình biên dịch gọi ngầm mặc dù chúng không được định nghĩa trong lớp.