网站首页 > 技术文章 正文
# 分析
在项目开发中,遇上这么一个错误:
0xc00000fd stack_overflow
这是一个栈溢出的错误,奇怪,我delete怎么会提示这么一个错误呢?
于是问题了群:
# 总结
这个错误实在是蠢啊!
没有细想,直接写了delete this; 这说明基础还是不扎实。
##delete 的工作方式
delete 运算符将调用函数运算符 delete。
对于不是类类型(class、struct 或 union)的对象,将调用全局 delete 运算符。
对于类类型的对象,如果 delete 表达式以一元范围解析运算符 (::) 开始,则会在全局范围中解析解除分配函数的名称。
否则,**delete 运算符将在释放内存之前为对象调用析构函数(如果指针不为 null)**。
可为每个类定义 delete 运算符;如果给定类不存在这种定义,则会调用全局 delete 运算符。
如果删除表达式用于释放其静态对象具有虚拟析构函数的类对象,则将通过对象的动态类型的虚拟析构函数解析释放函数。
##更为通俗的说明为:
(1)delete用于释放new操作所分配的内存资源。
(2)delete与new是配对操作,也就是说,通过new分配的资源,只可以通过delete来释放。
(3)delete调用时,如果释放的是类对象,那么,它会先调用类中的“析构函数”,再释放类对象所占用的内存空间。
##比如一个类:
class A
{
public:
A(){};
~A(){};
private:
int num = 10;
}
int main()
{
A* a = new A();
delete a;
}
delete a的执行过程如下:
猜你喜欢
- 2024-12-06 2024年C++编程不再推荐使用的功能你还在在用吗?
- 2024-12-06 C++ memcpy的用法,大数据传输与获取
- 2024-12-06 C++中继承的详细介绍以及多态的使用场景
- 2024-12-06 C++“智能指针”并不智能,因为它也不总是知道内存是如何分配的
- 2024-12-06 C++11精要学习:右值引用与完美转发
- 2024-12-06 C/C++编程笔记:详细讲解丨复制构造函数
- 2024-12-06 C++ map用法总结
- 2024-12-06 C#与C++交互开发系列(四):使用C++/CLI进行互操作
- 2024-12-06 C++的map用法
- 2024-12-06 C++基础语法梳理:内存分配和管理
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)