nullptr trong C++ là gì

Nullptr Trong C La Gi



Trong C++, một giá trị con trỏ cụ thể được gọi là con trỏ rỗng được sử dụng để chỉ ra rằng một con trỏ không đề cập đến bất kỳ vị trí bộ nhớ hợp lệ nào. Trong tiêu chuẩn C ++ 11 trở lên, nó được biểu thị bằng từ khóa “ nullptr ” hoặc bằng giá trị không đổi của 0.

Các con trỏ rỗng ý tưởng là rất quan trọng vì nó hỗ trợ ngăn chặn truy cập bộ nhớ sai, điều này có thể dẫn đến lỗi thời gian chạy không mong muốn và lỗi phần mềm. Hãy xem xét kịch bản khi một chương trình cố gắng đọc hoặc ghi vào một địa chỉ bộ nhớ chưa được tạo hoặc đã được giải phóng. Hành vi đó là không thể xác định được trong C++ và có thể dẫn đến các sự cố nghiêm trọng về thời gian chạy hoặc lỗi bảo mật. Một con trỏ không hợp lệ và không được hủy đăng ký nếu nó liên kết với một giá trị null. Việc chấm dứt chương trình, lỗi phân đoạn hoặc truy cập bộ nhớ trái phép chỉ là một vài ví dụ về hành vi không mong muốn có thể xảy ra khi hủy bỏ hội nghị con trỏ rỗng .

Ví dụ về nullptr trong C++

#include
sử dụng không gian tên tiêu chuẩn ;
int chủ yếu ( )
{
nullptr_t pi1, pi2 ;
nếu như ( pi1 >= pi2 )
{
cout << 'Con trỏ 1 lớn hơn giá trị con trỏ 2' << kết thúc ;
}
khác
{
cout << 'Con trỏ 2 lớn hơn giá trị con trỏ 1' << kết thúc ;
}
than * ch = pi1 ;
nếu như ( ch == nullptr )
cout << 'Biến con trỏ ch có giá trị null với tham chiếu địa chỉ thứ 0' << kết thúc ;
khác
cout << 'Biến con trỏ ch không phải là giá trị null, nó có một số giá trị với tham chiếu địa chỉ' << kết thúc ;
trở lại 0 ;
}

Trong đoạn mã trên, chúng tôi đang sử dụng hai nullptrs và so sánh chúng với nhau. Sau đó, chúng tôi đang sử dụng con trỏ ký tự để xác thực nullptr .







đầu ra



Lý do nên sử dụng nullptr trong C++

Con trỏ rỗng thường được sử dụng trong lập trình C++ vì một số lý do:



1: Khởi tạo con trỏ

Khi một biến con trỏ được khai báo, nó phải luôn được khởi tạo với một vị trí bộ nhớ hợp lệ hoặc một con trỏ rỗng . Khi con trỏ được truy cập sau trong mã, điều này giúp ngăn hành vi không được khai báo.





2: Mã lỗi

Chức năng có thể trở lại con trỏ rỗng dưới dạng mã lỗi để cho biết rằng chúng không thể hoàn thành hành động đã chỉ định hoặc cấp phát bộ nhớ.

3: Xác minh tính hợp lệ của con trỏ

Xác minh tính hợp lệ của con trỏ trước khi hủy bỏ hội nghị, đó luôn là một ý tưởng thông minh. Điều này làm tăng độ bền của mã và hỗ trợ ngăn ngừa các lỗi thời gian chạy không mong muốn.



4: Đa hình

Trong C++, con trỏ lớp cơ sở không trỏ đến bất kỳ đối tượng nào của lớp dẫn xuất được biểu diễn bởi con trỏ rỗng . Điều này thường được sử dụng trong lập trình đa hình để xử lý các tính năng hướng đối tượng như thừa kế và chức năng ảo.

Con trỏ rỗng không nên nhầm lẫn với các con trỏ lơ lửng hoặc chưa được khởi tạo, điều quan trọng là phải nhớ điều này. Con trỏ chưa được khởi tạo có thể trỏ tới bất kỳ địa chỉ nào trong bộ nhớ vì chúng chưa được khởi tạo giá trị. Mặt khác, con trỏ lơ lửng là những con trỏ đề cập đến các vùng bộ nhớ không hợp lệ hoặc đã được giải phóng. Trong lập trình C++, cả con trỏ lơ lửng và con trỏ chưa được khởi tạo đều có khả năng dẫn đến các vấn đề về thời gian chạy.

Ưu điểm của việc sử dụng nullptr trong C++

Có một số lợi ích của việc sử dụng một nullptr .

1: An toàn

Bởi vì nullptr an toàn hơn NULL, nên sử dụng nó thay thế. Trong khi NULL được định nghĩa đơn giản là một hằng số nguyên có giá trị bằng 0, nullptr là một ký tự con trỏ chỉ có thể được chuyển đổi thành một loại con trỏ và không thể chuyển thành bất kỳ loại nào khác.

2: Khả năng sử dụng

Trong lập trình C++, có nhiều cách để sử dụng con trỏ rỗng . Để khởi tạo con trỏ, gửi tham số tới lệnh gọi hàm hoặc trả về giá trị con trỏ từ hàm, chẳng hạn, là một số cách sử dụng có thể có của nó. Nó cũng có thể được sử dụng để xác định xem lệnh gọi hàm hoặc hành động có mang lại giá trị con trỏ hợp pháp hay không.

3: Phân bổ bộ nhớ động

Cấp phát bộ nhớ động là một trong những ứng dụng phổ biến nhất của con trỏ rỗng . Sử dụng toán tử new trong C++, việc cấp phát bộ nhớ động được thực hiện. Khi gọi phương thức mới, một con trỏ tới đối tượng mới được tạo sẽ được trả về. Nếu phân bổ không thành công vì bất kỳ lý do gì, chẳng hạn như không có đủ bộ nhớ, NULL sẽ được gửi lại. Do đó, điều quan trọng là phải xác minh giá trị trả về trước khi sử dụng con trỏ để đảm bảo rằng việc phân bổ đã thành công.

Phần kết luận

Các con trỏ rỗng là một ý tưởng chính trong lập trình C++ đưa ra một cơ chế để chỉ ra rằng một địa chỉ trong bộ nhớ bị thiếu. Các nhà phát triển có thể ngăn chặn sự cố phần mềm và các sự cố khác bằng cách sử dụng con trỏ rỗng để đảm bảo rằng các ứng dụng của họ không cố gắng truy cập các địa chỉ bộ nhớ bị lỗi. Vì vậy, điều cần thiết là các lập trình viên phải hiểu cách con trỏ rỗng nên được sử dụng và để làm như vậy một cách hiệu quả trong các chương trình của họ.