Các delete[]
nhà điều hành được sử dụng để mảng xóa. Các delete
nhà điều hành được sử dụng để xóa các đối tượng không cho mảng. Nó gọi operator delete[]
và operator delete
hàm tương ứng để xóa bộ nhớ mà đối tượng mảng hoặc không phải mảng chiếm sau (cuối cùng) gọi các hàm hủy cho các phần tử của mảng hoặc đối tượng không phải là mảng.
Sau đây cho thấy các mối quan hệ:
typedef int array_type[1];
// create and destroy a int[1]
array_type *a = new array_type;
delete [] a;
// create and destroy an int
int *b = new int;
delete b;
// create and destroy an int[1]
int *c = new int[1];
delete[] c;
// create and destroy an int[1][2]
int (*d)[2] = new int[1][2];
delete [] d;
Đối với việc new
tạo ra một mảng (vì vậy, new type[]
hoặc new
được áp dụng cho cấu trúc kiểu mảng), Tiêu chuẩn tìm kiếm một operator new[]
loại lớp phần tử của mảng hoặc trong phạm vi toàn cầu và chuyển lượng bộ nhớ được yêu cầu. Nó có thể yêu cầu nhiều hơn N * sizeof(ElementType)
nếu nó muốn (ví dụ để lưu trữ số lượng phần tử, vì vậy sau này khi xóa sẽ biết có bao nhiêu lệnh gọi hàm hủy được thực hiện). Nếu lớp khai báo operator new[]
thêm một lượng bộ nhớ chấp nhận một bộ nhớ khác size_t
, tham số thứ hai đó sẽ nhận được số phần tử được phân bổ - nó có thể sử dụng điều này cho bất kỳ mục đích nào nó muốn (gỡ lỗi, v.v.).
Đối với việc new
tạo ra một đối tượng không phải là mảng, nó sẽ tìm kiếm một lớp operator new
trong phần tử hoặc trong phạm vi toàn cục. Nó vượt qua số lượng bộ nhớ được yêu cầu (chính xác sizeof(T)
luôn luôn).
Đối với delete[]
, nó nhìn vào loại lớp phần tử của mảng và gọi các hàm hủy của chúng. Các operator delete[]
chức năng được sử dụng là một trong lớp các loại nguyên tố, hoặc nếu không có thì trong phạm vi toàn cầu.
Đối với delete
, nếu con trỏ được truyền là một lớp cơ sở của loại đối tượng thực tế, thì lớp cơ sở phải có một hàm hủy ảo (nếu không, hành vi không được xác định). Nếu nó không phải là một lớp cơ sở, thì hàm hủy của lớp đó được gọi và một operator delete
trong lớp đó hoặc toàn cục operator delete
được sử dụng. Nếu một lớp cơ sở được thông qua, thì hàm hủy của loại đối tượng thực tế được gọi và operator delete
tìm thấy trong lớp đó được sử dụng hoặc nếu không có, thì toàn cục operator delete
được gọi. Nếu operator delete
trong lớp có một tham số thứ hai của loại size_t
, nó sẽ nhận được số lượng phần tử để phân bổ.