Đề XuấT, 2024

Editor Choice

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

Đô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'. Có khả năng, 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 phá hủy nó. Nó có thể được thực hiện với sự trợ giúp của 'Destructor'.

Chúng ta hãy xem xét 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

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ờ khaiclass_name (đối số nếu có) {};~ class_name (không có đối số) {};
Lập luậnNgườ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 đố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 đối tượng thực thi một số mã tại thời điểm phá hủy.
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 lớp.Nhưng luôn có một hàm hủy duy nhất trong lớp.
Sao chép xây dựngCopy 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ảiNhà 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 constructor 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í là "khoảng trống". 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.

Các nhà xây dựng 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ọ không thể được giới thiệu đến địa chỉ của họ.

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

 lớp Const {int a, b; công khai: Const () {// constructor 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:

Destructor 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 một lớp, trước ký hiệu dấu 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ừ 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 nad giá trị của một a, b, được in. Sau đó, hàm hủy được gọi và in thông báo đối tượng C1 bị phá hủy.

Sự khác biệt chính giữa các nhà xây dựng và phá hủy

  1. Mục đích chính của hàm tạo là phân bổ bộ nhớ cho các đối tượng khi chúng được tạo trong khi đó, mục đích chính của hàm hủy 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 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à phân bổ bộ nhớ của đối tượng.
  3. Một constructor được gọi khi một đối tượng được tạo. Mặt khác, 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 mà đố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. Mặt khác, 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 lớp, chỉ có một hàm hủy.
  7. Có một khái niệm về hàm tạo 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 trong khi đó, các hàm hủy 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ả hai, constructor và hàm hủy đều được gọi bởi trình biên dịch mặc dù chúng không được định nghĩa trong lớp.

Top