Menu
CoddyTech

Toán tử new và delete

Bài học 11 trên 14 trong khóa học Con trỏ trong C++ của Coddy.

Điều quan trọng cuối cùng bạn cần học về con trỏ là cấp phát bộ nhớ động. 

Cấp phát bộ nhớ động cho phép cấp phát bộ nhớ trong khi chương trình đang chạy. Điều này có nghĩa là bạn không cần khai báo và khởi tạo biến dùng con trỏ trước khi chương trình bắt đầu. Bạn có thể cấp phát chỗ trong bộ nhớ cho những thứ sẽ dùng sau.

Để làm vậy, ta dùng từ khóa new. 

int *ptr; // Khai báo một con trỏ (pointer)
// Cấp phát bộ nhớ cho 1 int:
ptr = new int; // ptr trỏ đến vùng bộ nhớ đó

Khi dùng new, về cơ bản, ta dành chỗ trong bộ nhớ cho một số nguyên để dùng sau.

Để tránh rò rỉ bộ nhớ, nội dung này sẽ được đề cập trong bài học tiếp theo, ta cần giải phóng mọi vùng nhớ đã cấp phát bằng new trước khi chương trình kết thúc bằng từ khóa delete.

int *ptr;
ptr = new int;
*ptr = 10;

cout << "*ptr = " << *ptr << endl;
delete ptr; // Giải phóng bộ nhớ đã cấp phát

Như bạn thấy, sau khi cấp phát bộ nhớ cho con trỏ ptr, ta dùng từ khóa delete để xóa vùng nhớ đó. Lúc này, vùng nhớ đã được giải phóng và có thể sử dụng lại. Trong bài học tiếp theo, bạn sẽ tìm hiểu tầm quan trọng của việc kiểm soát rò rỉ bộ nhớ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

challenge icon

Thử thách

Dễ

Cấp phát bộ nhớ động cho ba số nguyên bằng các con trỏ ptrA, ptrB và ptrC. Dùng ba số nguyên được truyền vào làm đối số của hàm, rồi gán lần lượt các số đó cho các địa chỉ mà con trỏ trỏ tới. Gán số nguyên thứ nhất cho ptrA, số nguyên thứ hai cho ptrB và số nguyên cuối cùng cho ptrC, cuối cùng in ra giá trị được giải tham chiếu của cả ba con trỏ, ngăn cách bằng khoảng trắng.

KHÔNG viết hàm <i>main()</i>

Tự làm thử

#include <iostream>

using namespace std;

void dynamicMemory(int a, int b, int c) {
    // Viết code của bạn ở đây
}

// KHÔNG viết hàm main()

Tất cả bài học trong Con trỏ trong C++

Tự luyện tập: Trình biên dịch C++ online