LẬP TRÌNH C nâng cao -BÀI 14 - DESTRUCTOR, CONSTRUCTOR, CONVERSION VÀ DEBUG part 2

BÀI 14: DESTRUCTOR, CONSTRUCTOR, CONVERSION VÀ DEBUG ( tiếp theo) Tương tự bạn có thể viết cho calloc và realloc Phát hiện rò rỉ bộ nhớ với new và delete Với vấn đề phát hiện leak memory, chúng ta nên dùng malloc/free với primitive và dùng new/delete với object, vì delete còn gọi destructor của object. Lí do nữa là overload toán tử new và delete ở global scope rất phức tạp và không phải trình biên dịch nào cũng hỗ trợ overload hai toán tử này. . | 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 14 DESTRUCTOR CONSTRUCTOR CONVERSION VÀ DEBUG tiếp theo Tương tự bạn có thể viết cho calloc và realloc Phát hiện rò rỉ bộ nhớ với new và delete Với vấn đề phát hiện leak memory chúng ta nên dùng malloc free với primitive và dùng new delete với object vì delete còn gọi destructor của object. Lí do nữa là overload toán tử new và delete ở global scope rất phức tạp và không phải trình biên dịch nào cũng hỗ trợ overload hai toán tử này. Thêm nữa những ràng buộc chặt chẽ với new delete khiến đôi khi việc này trở nên không thể. Đây là một trong những lí do vì sao malloc free vẫn còn hữu dụng cho dù đã có new delete Ví dụ sau chúng ta sẽ viết một lớp overload các toán tử new delete new và delete cho lớp đó. Bạn sẽ thấy là phiên bản overload của các toán tử này đã được gọi CODE include iostream include using namespace std class MyClass public int data MyClass data 0 MyClass int data data data void operator new unsigned int size void ptr malloc size cout new endl return ptr void operator delete void p cout delete endl free p void operator new unsigned int size void ptr malloc size cout new endl return ptr void operator delete void p cout delete endl free p int main MyClass a new MyClass a MyClass 2 cout a .data endl delete a MyClass b new MyClass 5 for int i 0 i 5 i b i MyClass i for int i 0 i 5 i cout b i .data delete b return 0 Còn ví dụ dưới chúng ta sẽ xác định rò rỉ bộ nhớ nếu khởi tạo bằng new mà không hủy bỏ bằng delete. Với khởi tạo bằng new mà hủy bỏ bằng delete ta sẽ gọi delete CODE include iostream include list include using namespace std struct MEM_INFO void address int size char file 256 int line list MEM_INFO lmi list MEM_INFO iterator lmii class MyClass public void operator new unsigned int size char file int line void ptr malloc size if ptr NULL MEM_INFO memInfo memset memInfo 0 sizeof MEM_INFO ptr size strcpy file .

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
Đã 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.