hoặc
pointer = new type [elements]
Biểu thức đầu tien được dùng để cấp phát bộ nhớ chứa một phần tử có kiểu
type. Lệnh thứ hai được dùng để cấp phát một khối nhớ (một mảng) gồm các
phần tử kiểu type.
Ví dụ:
int * bobby;
bobby = new int [5];
trong trường hợp này, hệ điều hành dành chỗ cho 5 phần tử kiểu
int
trong bộ
nhớ và trả về một con trỏ trỏ đến đầu của khối nhớ. Vì vậy lúc này
bobby
trỏ
đến một khối nhớ hợp lệ gồm 5 phần tử
int
.
Bạn có thể hỏi tôi là có gì khác nhau giữa việc khai báo một mảng với việc cấp
phát bộ nhớ cho một con trỏ như chúng ta vừa làm. Điều quan trọng nhất là
kích thước của một mảng phải là một hằng, điều này giới hạn kích thước của
mảng đến kích thước mà chúng ta chọn khi thiết kế chương trình trong khi đó
cấp phát bộ nhớ động cho phép cấp phát bộ nhớ trong quá trình chạy với kích
thước bất kì.
Bộ nhớ động nói chung được quản lí bởi hệ điều hành và trong các môi trường
đa nhiệm có thể chạy một lúc vài chương trình có một khả năng có thể xảy ra là
hết bộ nhớ để cấp phát. Nếu điều này xảy ra và hệ điều hành không thể cấp phát
bộ nhớ như chúng ta yêu cầu với toán tử
new
, một con trỏ null (zero) sẽ được trả
về. Vì vậy các bạn nên kiểm tra xem con trỏ trả về bởi toán tử
new
có bằng null
hay không:
int * bobby;
bobby = new int [5];
if (bobby == NULL) {