猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
删除C+中的VS删除[]运算符
删除C+中的VS删除[]运算符
.之间的区别是什么?
delete
和
delete[]
C+中的运算符?
慕妹3146593
浏览 412
回答 3
3回答
呼啦一阵风
这个delete操作符释放内存,并为创建的单个对象调用析构函数。new.这个delete []运算符释放内存,并为创建的对象数组调用析构函数。new [].使用delete返回的指针上new []或delete []返回的指针上new导致不明确的行为。
0
0
0
白猪掌柜的
这个delete[]运算符用于删除数组。这个delete运算符用于删除非数组对象。它叫operator delete[]和operator delete函数分别删除数组或非数组对象在(最终)调用数组元素或非数组对象的析构函数后占用的内存。以下是关系:typedef int array_type[1];// create and destroy a int[1]array_type *a = new array_type;delete [] a; // create and destroy an intint *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;为了new创建一个数组(因此,new type[]或new(应用于数组类型构造),标准查找operator new[]在数组的元素类型类或全局范围中,并传递请求的内存量。它可能要求超过N * sizeof(ElementType)如果它想要(例如,存储元素的数量,那么它以后在删除时知道要执行多少析构函数调用)。如果类声明operator new[]除内存量外,还接受另一个size_t,第二个参数将接收分配的元素数量-它可以将其用于它想要的任何目的(调试等.)。为了new创建非数组对象时,它将查找operator new在元素的类或全局范围中。它传递请求的内存量(完全正确)。sizeof(T)(一直如此)。为了delete[],它查看数组的元素类型,并调用它们的析构函数。这个operator delete[]函数是元素类型类中的函数,如果没有函数,则在全局作用域中。为了delete,如果传递的指针是实际对象类型的基类,则基类必须具有虚拟析构函数(否则,行为未定义)。如果它不是基类,则调用该类的析构函数,并且operator delete在那类中还是全局的operator delete被利用了。如果传递了基类,则调用实际对象类型的析构函数,operator delete在该类中找到的是使用,或者如果没有,则使用全局operator delete叫做。如果operator delete类中有第二个类型的参数。size_t,它将接收要释放的元素的数量。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C++
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续