Chủ đề: Thắc mắc về hàm hủy C++
-
23-06-2015, 09:00 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Copy'n'swap thì chỉ nên dùng với socket/connection thôi.
Mình thì mình sẽ dùng 1 class chuyên về array (nhái theo std::vector), logic về array nằm hết trong này (tất nhiên bạn phải xài đc template).View more random threads:
- Xử lý chuỗi
- sửa mình hộ code bài nhân 1
- mọi người vào thử sức làm bày này nào !!!
- Sửa lỗi danh sách sinh viên!
- Bài toán về hoán vị
- [help] Làm sao chuyển thành file *.exe??
- Giúp mình bài này!!
- đảo ngược mảng một chiều
- Sự khác nhau endl và \n
- Cho mình câu trả lời về sự khác biệt giữa DSĐ và DSLK này với
-
23-06-2015, 12:24 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi quocchi22101262
nếu không thì cấp phát mới vùng nhớ cho List sau đó gán các giá trị.
Sorry, còn cần kiểm tra xem vùng nhớ của List có phải là NULL ko, nếu ko thì cần giải phóng trước sau đó mới cấp phát mới.
-
23-06-2015, 02:52 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi quocchi22101262
ý là gọi c.xuat() sau khi gán c = a + b; à? Đương nhiên là ko xuất được vì mảng mà con trỏ trong c trỏ tới là mảng của (a+b), mà mảng này đã được giải phóng rồi.
nếu ko viết assignment operator thì khi gán c = x thì nó sẽ gán c.n = x.n và c.List = x.List (cái này gọi là shallow copy). Ở đây x = a+b, là giá trị tạm thời, sau khi gán xong sẽ giải phóng x. Tức là gọi delete[] x.List, đồng nghĩa với gọi delete[] c.List vì 2 con trỏ này trỏ tới cùng 1 mảng. Như vậy c trỏ tới mảng đã được giải phóng => nếu gọi c.xuat() thì sẽ in ra giá trị rác hoặc báo lỗi.
muốn dấu '=' nó hoạt động đúng thì phải cấp phát 1 mảng cho c.List, copy từng phần tử mà x.List trỏ tới vào mảng này.
-
23-06-2015, 07:03 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Thắc mắc về hàm hủy C++
http://codepad.org/ApJ9QuDW
em viết như vậy khi không có hàm hủy thì chạy bình thường, còn có hàm hủy thì báo lỗi ????
tại sao lại như vậy mấy anh???
-
23-06-2015, 07:18 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
do ko có overload operator=
lúc gán c=a+b thì con trỏ trong c trỏ tới con trỏ của DaThuc (a+b) tạm thời, sau dấu ; thì (a+b) biến mất, mảng mà (a+b) tạo ra cũng bị delete[], trong khi con trỏ trong c vẫn trỏ tới. Tới khi c bị huỷ thì gây ra lỗi vì vùng nhớ này đã được giải phóng rồi.
nếu trong hàm tạo có xài new thì ngoài hàm hủy ra còn phải overload 2 cái nữa: copy constructor và assignment operator
copy constructor: DaThuc(const DaThuc&);
assignment operator: const DaThuc& operator=(const DaThuc&); hoặc DaThuc& operator=(const DaThuc&);
hoặc nếu sử dụng copy-and-swap thì const DaThuc& operator=(DaThuc); hoặc DaThuc& operator=(DaThuc);
-
23-06-2015, 07:40 PM #6Silver member
- Ngày tham gia
- Sep 2015
- Đang ở
- Hà Nội
- Bài viết
- 0
Gửi bởi INTP
-
24-06-2015, 07:39 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi INTP
Tuy nhiên, việc thi công và bảo dưỡng đường bê tông nhựa đòi hỏi sự chuyên nghiệp và kỹ thuật cao từ các nhà thầu và kỹ sư. Sự linh hoạt và độ bền cao của đường bê tông nhựa cũng giúp giảm thiểu chi...
Xây Dựng Đẳng Cấp: Cùng Đại Thanh,...