2012-04-10 43 views
7

Giả sử tôi có một cấu trúc với hai con trỏ, mỗi con trỏ trỏ đến một đối tượng có một destructor được thực thi. Cũng giả định rằng điểm đầu đến một cấu trúc Listnode có một giá trị khác NULL * học sinh và * tiếp theo:Việc xóa con trỏ của cấu trúc cũng sẽ xóa con trỏ trong cấu trúc?

struct Listnode {  
    Student *student; 
    Listnode *next; 
}; 
Listnode *head = new Listnode; 

Nếu tôi sử dụng từ delete dự trữ trên Listnode con trỏ 'đầu' nó sẽ gọi hàm hủy trong vòng cấu trúc đó lớp học sinh và lớp Listnode tương ứng với điểm 'sinh viên' và 'tiếp theo'. Nói cách khác, sẽ xóa * đầu cũng xóa * sinh viên và * đầu được cung cấp tiếp theo là con trỏ duy nhất cho Listnode

Trả lời

10

Không trừ khi destructor của bạn ~Listnode gọi delete trên con trỏ. Tuy nhiên, gọi số delete sẽ gọi hàm hủy của các thành viên không phải con trỏ.

+0

Vì vậy, bạn có thể triển khai trình phá hủy cho cấu trúc? –

+2

@PatMurray Tuyệt đối! Dù bạn có thể làm gì trong lớp, bạn cũng có thể làm trong 'cấu trúc'. Trong thực tế, sự khác biệt duy nhất là các thành viên của lớp trước khi khai báo truy cập đầu tiên (công khai, riêng tư hoặc được bảo vệ) được coi là riêng tư, trong khi các thành viên của một cấu trúc được coi là công khai. – dasblinkenlight

+0

Structs có thể kế thừa như các lớp, và truy cập thừa kế mặc định là public cho struct và private cho các lớp. Một sự khác biệt, nhưng dọc theo cùng một dòng. – MSalters

1

Không! Bạn nên xóa chúng theo cách thủ công trước, nhưng bạn cũng có thể thêm các mã xóa trong phương thức hủy.

Các vấn đề liên quan