Em mới đọc sách sách sang phần này nhưng vẫn ko hiểu , xin A/C giải đáp thắc mắc e là new và delete hoạt động như thế nào ? nó để làm gì ạ ? Em cảm ơn
Toán tử new, delete trong c++ hoạt động như thế nào, dùng để làm gì?
Toán tử new dùng để cấp phát bộ nhớ cho 1 con trỏ.
VD:
int *a = new int; // cấp phát bộ nhớ cho con trỏ a thuộc kiểu int (4 bytes)
double *arr = new double[5]; // cấp phát 5 ô nhớ cho mảng arr thuộc kiểu double (8 bytes)
Còn toán tử delete dùng để giải phóng 1 con trỏ đã được cấp phát trước đó, còn nếu đó là 1 mảng thì dùng delete[]
VD:
int *a = new int;
// do_something;
delete a; // giải phóng con trỏ a đã cấp phát ở trên
double *arr = new double[5];
// do_something;
delete[] arr; // giải phóng mảng arr đã được cấp phát ở trên
Còn cấp phát và giải phóng để làm gì thì bạn sẽ được học khi học tới con trỏ nhé.
Hoặc có thể dùng tính năng search của diễn đàn để tìm những bài viết nói về con trỏ, cấp phát động, giải phóng bộ nhớ, …
E đang học tới phần con trỏ , nhưng theo en ghĩ là khi khai biến bất kỳ ví dụ như : int x thì x đã được cấp phát bộ nhớ . Vậy cần gì phải có new vậy a ?
Thế này nhé.
Trong bộ nhớ ảo của máy được chia làm 4 phần.
Không cần bạn nhé. Khi nào tạo biến con trỏ thì mới cần cấp phát bộ nhớ.
Vậy là int* a = int x , cái chỗ int x là do mình cấp phát bộ nhớ cho biến đó và cũng có thế xóa đi bằng delete . Em hiểu vậy đúng ko a ?
Không có vụ int *a = int x
đâu nhé.
Như thế này thì được:
int x;
int *a = &x;
Hiểu 1 cách nôm na là cho con trỏ a
trỏ tới biến x
kiểu int
đã được khởi tạo trong Stack. Trong trường hợp này, cả 2 đều nằm trong Stack nên không thể giải phóng bằng toán tử delete
… và con trỏ a
cũng không cần phải cấp phát khi đã trỏ tới thằng khác.
Vậy là cái int * pt = new int , cái biến trỏ này giúp mình tự tạo ra biến này rồi mình tự hủy được . Không như biến int x ; nó không tự hủy được vì nó nằm trong vùng hệ thống của CPU . Phẩi hông a ?
Đúng rồi.
em cảm ơn a nhiều e hiểu r
Like và subscribe đi nào
Người bí ẩn cho e hỏi, ứng dụng của việc cấp phát bộ nhớ cho con trỏ là gi, nó được dùng làm gì trong thực tế ạ?
Cái này mình cũng không rõ lắm.
Thực ra, con trỏ dùng để áp dụng cho mảng động là chính. Chính vì sự di chuyển tự do trong bộ nhớ nên nó cũng tiện lợi nhưng dễ gây ra lỗi nếu không rành hoặc không cẩn thận
Còn việc cấp phát bộ nhớ là điều hiển nhiên nếu muốn thao tác trên con trỏ, trừ khi mình đã trỏ nó tới 1 “ngôi nhà” khác !
@tcm
Như này đúng không b?
int a; // biến Stack
int a = new a; // là biến mình tự cấp phát
nếu mình khai báo như này int a = new a; thì nó không liên quan đến biến int a; phải không b?
vậy cho em hỏi, sau khi giải phóng vùng nhớ bằng câu lệnh delete thì con trỏ vẫn còn trỏ tới vùng nhớ đó nhưng giá trị tại vùng nhớ đó có còn không ạ
Cấp phát này gọi là “động” vì kích thước không bị cố định trong code mà đến runtime mới biết.
- Cấu trúc dữ liệu
- Áp dụng đa hình
Hên xui, chỉ có thể chắc chắn là không được truy cập vào
Chào bạn ạ, những kiến thức trên bạn học ở tài liệu nào vậy ? Bạn chia sẽ cho mình được học với . Mình mới bắt đầu học thôi, nên rất mơ hồ, mong bạn giúp đỡ. Mình cảm ơn ạ.
Đó là cấu trúc file thực thi trong một hệ điều hành. Đào sâu vào thêm thì còn chỗ nạp thư viện ngoài nữa.