Trang tài liệu
Khóa học C++ nền tảng
Chương 6. Con trỏ và tham chiếu
Con trỏ raw và toán tử new và delete

Con trỏ raw và toán tử new và delete

Con trỏ raw trong C++ là cấu trúc cấp thấp giữ trực tiếp địa chỉ bộ nhớ. Chúng có thể được sử dụng để cấp phát bộ nhớ theo cách thủ công, tạo mảng động và truyền giá trị một cách hiệu quả, trong số những thứ khác.

Toán tử new

Toán tử new được sử dụng để cấp phát bộ nhớ trên heap. Bộ nhớ được phân bổ bằng cách sử dụng new vẫn khả dụng cho đến khi bạn giải phóng nó một cách rõ ràng bằng cách sử dụng toán tử delete tương ứng.

Đây là một ví dụ về việc sử dụng toán tử new:

int* ptr = new int; // phân bổ một int trên heap
*ptr = 42; // Gán giá trị 42 cho int được cấp phát

Toán tử delete

Toán tử delete được sử dụng để giải phóng bộ nhớ đã được phân bổ bằng cách sử dụng new. Sau khi bộ nhớ được giải phóng, nó có sẵn để được phân bổ lại cho các mục đích khác. Việc không phân bổ bộ nhớ đúng cách có thể dẫn đến rò rỉ bộ nhớ.

Đây là một ví dụ về việc sử dụng toán tử delete:

int* ptr = new int; // Cấp phát động một int trên heap
*ptr = 42; // Gán giá trị 42 cho int được cấp phát
delete ptr; // Giải phóng bộ nhớ được gán cho ptr

Toán tử new [] và delete []

Toán tử new[] và delete[] được sử dụng để phân bổ và giải phóng bộ nhớ cho một mảng đối tượng. Cú pháp của new[] và delete[] rất giống với cú pháp của new và delete.

Đây là một ví dụ về cách sử dụng toán tử new[] và delete[]:

int n = 10;
int* arr = new int[n]; // Tự động phân bổ một mảng gồm 10 số nguyên trên heap

// Đặt một số giá trị trong mảng
for (int i = 0; i < n; i++) {
  arr[i] = i;
}
delete[] arr; // Giải phóng bộ nhớ được gán cho mảng

Tóm lại, con trỏ raw, toán tử new và delete cho phép quản lý bộ nhớ thủ công trong C++, cung cấp khả năng kiểm soát phân bổ và giải phóng. Đảm bảo luôn giải phóng bộ nhớ được phân bổ bằng new hoặc new[], để tránh rò rỉ bộ nhớ trong các chương trình của bạn.