LẬP TRÌNH C nâng cao -BÀI 15 - AUTO_PTR, MUTABLE, VOLATILE VÀ ĐÁNH GIÁ TỐC ĐỘ CHƯƠNG TRÌNH

L BÀI 15: AUTO_PTR, MUTABLE, VOLATILE VÀ ĐÁNH GIÁ TỐC ĐỘ CHƯƠNG TRÌNH auto_ptr Trong thư viện có định nghĩa lớp auto_ptr (nghĩa là con trỏ cấp phát và hủy bỏ vùng nhớ tự động) để giải quyết vấn đề rò rỉ bộ nhớ (tuy vậy vẫn có phiền toái, do đó lập trình viên tự cấp phát và giải phóng bộ nhớ vẫn là lựa chọn được khuyến khích hơn) Trong ví dụ dưới đây, p trỏ đến a (gọi là p sở hữu a) | LẬP TRÌNH C C NÂNG CAO Yêu cầu trước khi đọc học xong Lập trình C C căn bản BÀI 15 AUTO_PTR MUTABLE VOLATILE VÀ ĐÁNH GIÁ TỐC ĐỘ CHƯƠNG TRÌNH auto_ptr Trong thư viện memory có định nghĩa lớp auto_ptr nghĩa là con trỏ cấp phát và hủy bỏ vùng nhớ tự động để giải quyết vấn đề rò rỉ bộ nhớ tuy vậy vẫn có phiền toái do đó lập trình viên tự cấp phát và giải phóng bộ nhớ vẫn là lựa chọn được khuyến khích hơn Trong ví dụ dưới đây p trỏ đến a gọi là p sở hữu a Bạn không cần gọi delete a Khi chương trình kết thúc destructor của p được gọi p sẽ bị hủy nó sẽ tự động huỷ luôn a cho bạn. Đó là mục đích của auto_ptr bạn không phải lo về leak memory CODE include memory class MyClass int data public MyClass int data data data friend ostream operator ostream os const MyClass p os endl return os int main MyClass a new MyClass 5 auto_ptr MyClass p a cout p return 0 Dùng con trỏ bình thường thì có thể gây leak memory trong ví dụ sau CODE try Person p new Person p .func delete p catch . Dùng auto_ptr thì không lo việc ấy nữa CODE try auto_ptr Person p new Person p .func catch . Quá tuyệt phải không Không hẳn thế bản thân auto_ptr cũng có nhiều rắc rối khác. Cũng cái ví dụ trên ta sửa lại một chút. Lần này p sẽ chuyển quyền sở hữu a cho p2. Lần này sẽ sinh ra lỗi vì p2 trỏ đến vùng nhớ chứ không phải p. Sau khi chuyển a cho p2 sở hữu lúc này p chẳng sở hữu cái gì cả khỉ thật lúc này p đang trỏ đến cái gì ai mà biết CODE class MyClass int data public MyClass int data data data friend ostream operator ostream os const MyClass p os endl return os int main MyClass a new MyClass 5 auto_ptr MyClass p a cout p auto_ptr MyClass p2 p cout p return 0 const auto_ptr không thể chuyển quyền sở hữu được nữa ví dụ sau là không hợp lệ CODE MyClass a new MyClass 5 const auto_ptr MyClass p a auto_ptr MyClass p2 p Rắc rối thứ hai đó là auto_ptr không được dùng với cấu trúc bộ nhớ động như mảng hay các bộ lưu trữ của STL như vector list CODE int a new int 5 auto_ptr int p a lí do là vì khi .

Không thể tạo bản xem trước, hãy bấm tải xuống
TÀI LIỆU MỚI ĐĂNG
5    66    2    23-04-2024
Đã phát hiện trình chặn quảng cáo AdBlock
Trang web này phụ thuộc vào doanh thu từ số lần hiển thị quảng cáo để tồn tại. Vui lòng tắt trình chặn quảng cáo của bạn hoặc tạm dừng tính năng chặn quảng cáo cho trang web này.