new / delete new[] / delete[]
new但是对于自定义类型会进行初始化,调用其构造函数
delete对于内置类型与C语言中的free()函数差不多
但是对于自定义类型会调用其析构函数
delete[] arr // 释放arr数组
加上[]以让编译器知道释放的是数组进而调用全部元素的析构函数,否则只调用了第一个元素的析构,并引发断言报错
C++提出new和delete,主要是解决两个问题
- 自定义类型对象自动申请的时候,初始化和清理的问题 new/delete 调用构造函数和析构函数new失败了以后会抛异常,这样才符合面向对象语言的错误处理机制
抛异常delete和free一般不会失败,如果失败了,都是释放空间上存在越界或者释放指针位置不对
面向对象语言多采用抛异常的方式进行错误处理 try catch 语句
抛出的异常如果有catch进行捕获就会进入catch语句;如果抛出的异常没有被捕获就会报错
对于new,如果申请空间失败就会抛出异常
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)