Không, phụ thuộc vào tình hình, đôi khi nó là thiết kế hợp pháp và tốt .
Để hiểu tại sao và khi nào bạn cần gọi hàm hủy một cách rõ ràng, hãy xem điều gì đang xảy ra với "mới" và "xóa".
Để tạo một đối tượng động, T* t = new T;
dưới mui xe: 1. bộ nhớ sizeof (T) được cấp phát. 2. Hàm tạo của T được gọi để khởi tạo vùng nhớ được cấp phát. Toán tử mới thực hiện hai việc: cấp phát và khởi tạo.
Để phá hủy đối tượng delete t;
dưới mui xe: 1. Trình hủy của T được gọi. 2. bộ nhớ được cấp phát cho đối tượng đó được giải phóng. toán tử xóa cũng thực hiện hai việc: hủy và phân bổ.
Người ta viết hàm tạo để khởi tạo và hàm hủy để thực hiện hủy. Khi bạn gọi hàm hủy một cách rõ ràng, chỉ có tác vụ hủy được thực hiện, nhưng không thực hiện việc phân bổ .
Do đó, một cách sử dụng hợp pháp của hàm hủy gọi rõ ràng có thể là, "Tôi chỉ muốn hủy đối tượng, nhưng tôi không (hoặc không thể) giải phóng cấp phát bộ nhớ (chưa)."
Một ví dụ phổ biến về điều này là cấp phát trước bộ nhớ cho một nhóm các đối tượng nhất định mà nếu không thì phải cấp phát động.
Khi tạo một đối tượng mới, bạn lấy phần bộ nhớ từ nhóm được cấp phát trước và thực hiện "vị trí mới". Sau khi thực hiện xong với đối tượng, bạn có thể muốn gọi hàm hủy một cách rõ ràng để hoàn thành công việc dọn dẹp, nếu có. Nhưng bạn sẽ không thực sự phân bổ bộ nhớ, như việc xóa toán tử đã thực hiện. Thay vào đó, bạn trả lại đoạn này vào pool để sử dụng lại.