Ví dụ dưới đây minh họa cách ngăn sao chép lớp dẫn xuất. Nó dựa trên một lớp cơ sở mà cả nhà xây dựng bản sao và toán tử gán bản sao được khai báo private
.Khi nào và tại sao nên hủy trong lớp cơ sở KHÔNG được định nghĩa là ảo?
class Uncopyable
{
protected:
// allow construction and destruction of derived objects...
Uncopyable() {}
~Uncopyable() {}
private:
// but prevent copying...
Uncopyable(const Uncopyable&);
Uncopyable& operator=(const Uncopyable&);
};
Chúng ta có thể sử dụng lớp này, kết hợp với thừa kế riêng, để làm cho các lớp học uncopyable:
class derived: private Uncopyable
{...};
Chú ý rằng các destructor trong lớp Uncopyable
không khai báo là virtual.
Trước đây, tôi đã học rằng
- Cấu trúc trong lớp cơ sở shoul d là
virtual
. - Cấu trúc trong lớp không phải cơ sở không được thực hiện
virtual
.
Trong ví dụ này, hàm hủy cho Uncopyable
không phải là virtual
, nhưng nó đang được kế thừa từ đó. Điều này dường như đi ngược lại sự khôn ngoan mà tôi đã học được từ trước.
Khi nào và tại sao trình phá hủy trong lớp cơ sở KHÔNG được định nghĩa là virtual
?
Bạn đã thực hiện Uncopyable. Bạn đã không làm cho Uninheritable. –
Giảm âm lượng trên ** HUGE BOLD ** văn bản, phải không? Nó làm cho nó khó chịu để đọc! – Praetorian
@Praetorian, Văn bản in đậm giúp sắp xếp mục của bạn rõ ràng và đặt câu hỏi/câu trả lời của bạn dễ đọc hơn, (trừ khi bạn đang sử dụng điện thoại di động mà tôi đoán?). Kiểm tra ở đây: http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three –