不加括号的delete
时间: 2023-06-17 20:07:07 浏览: 69
delete是C++中用于释放动态分配内存的操作符,它会调用被删除对象的析构函数并释放其占用的内存。在使用delete时,需要确保被删除的对象是通过new动态分配的,否则会产生未定义行为。不加括号的delete只能用于释放单个对象,而加上方括号的delete可以用于释放动态分配的数组。例如:
```
int* ptr = new int;
delete ptr; //释放单个对象
int* arr = new int[10];
delete[] arr; //释放动态分配的数组
```
相关问题
c++类名后面加尖括号
在 C++ 中,类名后面加尖括号表示这是一个模板类。模板类是一种通用的类,可以根据不同的类型参数来生成具体的类,从而避免重复编写代码。常见的模板类包括容器类(如 vector、list、map 等)和函数对象类(如 sort、find_if 等)。举个例子,下面是一个模板类的定义:
```
template<typename T>
class MyArray {
public:
MyArray(int size) : m_size(size), m_data(new T[size]) {}
~MyArray() { delete[] m_data; }
T& operator[](int index) { return m_data[index]; }
int size() const { return m_size; }
private:
int m_size;
T* m_data;
};
```
这个模板类叫做 `MyArray`,它有一个类型参数 `T`,表示数组元素的类型。构造函数和析构函数分别用来创建和销毁数组,`operator[]` 重载用来访问数组元素,`size` 函数返回数组大小。使用模板类时,需要在类名后面指定类型参数,例如:
```
MyArray<int> a(10);
for (int i = 0; i < a.size(); ++i) {
a[i] = i;
}
```
这段代码创建了一个 `MyArray<int>` 对象 `a`,它包含 10 个整数,分别赋值为 0 到 9。
为什么delete释放数组需要加中括号呢
在释放动态分配的数组时,需要使用 `delete[]` 运算符而不是 `delete`。这是因为在动态分配数组时,使用的是 `new[]` 运算符,而 `new[]` 与 `new` 不同之处在于分配的是一块连续的内存空间,而不是单个对象。因此,在释放数组时,需要使用 `delete[]` 运算符,以确保释放整个数组所占用的内存空间,而不是仅释放第一个元素所占用的内存空间。同时,为了避免误解,建议在释放数组时加上中括号,以明确表明要释放的是数组。