Trong C ++, sự khác biệt giữa nút khai báo * temp và nút * temp = nút mới trong đó nút là một cấu trúc chứa dữ liệu 2 phần tử và tiếp theo là gì?


Câu trả lời 1:

Tôi sẽ giả sử hai khai báo này là cho các biến cục bộ hoặc tĩnh. Biến đầu tiên chỉ đơn thuần khai báo một biến có tên là tem tempv có loại là con trỏ kiểu con trỏ đến nút nút nhưng không khởi tạo nó. Biến thứ hai khai báo cùng một biến nhưng khởi tạo nó bằng một con trỏ tới cấu trúc nút được phân bổ trên heap.

Luôn luôn tốt hơn để khởi tạo các biến hơn là để chúng không được khởi tạo. Ngay cả khi bạn định đặt biến ở một nơi khác trong mã, tốt nhất là thường ít nhất đặt nó thành null trong khai báo (nút * temp = nullptr) vì nó giúp việc gỡ lỗi dễ dàng hơn.


Câu trả lời 2:

nút * temp; làm cho một con trỏ khởi tạo đến nút. Tại một số thời điểm trong tương lai, bạn có thể gán địa chỉ của một nút cho nó. Nút đó sẽ phải tồn tại. Bạn có thể để con trỏ đi ra khỏi phạm vi mà không làm rò rỉ nút, vì rõ ràng nó tồn tại tách biệt với con trỏ.

nút * temp = nút mới; cấp phát bộ nhớ cho và gọi hàm tạo để khởi tạo một đối tượng nút mới. Tham chiếu duy nhất đến nút đó là con trỏ. Nếu con trỏ đi ra khỏi phạm vi, nút sẽ bị rò rỉ, nghĩa là nó vẫn tồn tại, vẫn chiếm bộ nhớ, nhưng nó không thể truy cập theo bất kỳ cách nào. Trước khi con trỏ đi ra khỏi phạm vi, bạn nên xóa nút mà nó trỏ tới, để tránh điều đó.

Chủ đề tiếp theo: con trỏ thông minh. C ++ 11 và cao hơn có chúng trong ngôn ngữ. Trước đó, nó là khá dễ dàng để cuộn của riêng bạn. Một con trỏ thông minh là một đối tượng của một lớp với hàm tạo và hàm hủy. Khi con trỏ thông minh ra khỏi phạm vi, hàm hủy của nó được gọi và hàm hủy sẽ xóa thứ mà con trỏ sở hữu. Ngay cả khi mã thoát vì một ngoại lệ được ném, điều này xảy ra, con trỏ thông minh ngăn chặn rò rỉ.