1. Sao chép nội dung của thực thể này sang thực thể khác
Cái này thì là công việc của hàm dựng sao chép(copy constructor) hoặc toán tử gán, nhưng hôm nay ta sẽ thực hiện 1 cách sao chép khác bưa hơn và có vẻ nguy hiểm hơn đó là sử dụng hàm memcpy. Bạn có thể google để biết thêm chức năng của hàm này.Đại khái ta sẽ copy vùng nhớ của thực thể nguồn vào vùng nhớ của thực thể đích mà ko cần quan tâm nó chứa bao nhiêu trường. Số bytes sẽ copy chính bằng sizeof của lớp thực thể đó. Đến đây thì mọi ng chắc đủ hình dung cách làm rồi nhỉ.
Chú ý khi dùng với các class có sử dụng phương thức virtual vì hàm này nó sẽ ghi đè mất cái virtual function table(nhớ ko nhầm là tên nó như thế) của cái thực thể đích bằng cái của thực thể nguồn, cái này nguy hiểm vồn đấy :)).
2. Clear nội dung cuả thực thể
Giả sử thế này, có 1 thực thể A đã được khởi tạo và gán giá trị hoặc sử dụng blabla các kiểu rồi, giờ muốn reset giá trị các trường của nó về zero. Cách đầu tiên nghỉ đến là ta từ từ ngồi gán từng trường của nó thành 0, hơi mệt, giả sử thêm 1 trường nữa thì lại phải vào sửa code.May sao có hàm memset(google để biết thêm chi tiết), ý tưởng là dùng hàm này để set vùng nhớ của thực thể thành 0 hết, như thế thì vô hình chung ta đã set giá trị các trường thành 0 rồi.
Chú ý khi dùng với các class có sử dụng phương thức virtual vì hàm này nó sẽ ghi đè mất cái virtual function table(nhớ ko nhầm là tên nó như thế) thành 0 -> NULL đấy.
3. Ví dụ
Nội dung ví dụ khá đơn giản: ta tạo ra 1 class chứa 1 số trường sau đó tạo 1 thực thể của nó và gán cho các trường của thực thể này 1 số giá trị nào đó. Bước tiếp theo là test 2 chức năng copy và clear bằng cách:- Copy: tạo ra 1 thực thể thứ 2 từ lớp này và sử dụng memcpy để copy vùng nhớ của thèn thực thể đầu sang thèn mới này.
- Clear: sử dụng memset để set vùng nhớ của thực thể này về 0 hết.
Đây là kết quả chạy:
0 nhận xét :
Post a Comment