delete

C++ new和delete运算符简介

五迷三道 提交于 2020-03-11 12:47:03
在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。如下所示: int p = (int ) malloc( sizeof(int) * 10 ); //分配10个int型的内存空间 free§; //释放内存 在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。 用 new 和 delete 分配内存更加简单: int *p = new int; //分配1个int型的内存空间 delete p; //释放内存 new 操作符会根据后面的数据类型来推断所需空间的大小。 如果希望分配一组连续的数据,可以使用 new[]: int *p = new int[10]; //分配10个int型的内存空间 delete[] p; 用 new[] 分配的内存需要用 delete[] 释放,它们是一一对应的。 和 malloc() 一样,new 也是在堆区分配内存,必须手动释放,否则只能等到程序运行结束由操作系统回收。为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和C语言中 malloc()、free() 一起混用。 在C++中,建议使用 new 和 delete 来管理内存,它们可以使用C+

RESTful Web 服务四种操作POST/DELETE/PUT/GET

*爱你&永不变心* 提交于 2020-03-11 11:24:03
前言 关于REST及RESTful的概念,已有不少文章介绍,这里整理几篇我觉得不错的参考: 维基百科的定义: REST 什么是REST跟RESTful? REST理论的中文详述,其中你可以了解到WCF Restful属于RPC 样式的 Web 服务,ASP.NET Web API属于RESTful Web 服务。 深入浅出REST InfoQ的专文介绍,文中甚至有Roy T. Fielding当年REST博士论文的中文翻译链接。另外值得一提的,大家可能没听过Roy Fielding的大名,但如果得知他是HTTP规格的主要作者及Apache HTTP Server项目的发起人之一,应该不会有人怀疑他在Web技术领域的分量。 上面的文章建议大家认真的读一下,这里我们简要的介绍下REST 做入门介绍,理解整个 REST 能让我们在 ASP.NET Web API 的路上更顺畅。 REST是什么? REST ( REpresentational State Transfer ),State Transfer 为 “状态传输” 或 "状态转移 “,Representational 中文有人翻译为"表征”、“具象”,合起来就是 “表征状态传输” 或 “具象状态传输” 或 “表述性状态转移”,不过,一般文章或技术文件都比较不会使用翻译后的中文来撰写,而是直接引用 REST 或 RESTful

Delete 和 delete [] 的区别

谁都会走 提交于 2020-03-11 10:15:44
当调用delete的时候,系统会自动调用已分配的对象的析构函数。当我们用new [] 分配的对象是基本数据类型时,用delete和delete [] 没有区别。但是,当分配的对象是自定义对象时,二者不能通用。一般来说 使用new分配的对象,用delete来释放。用new[] 分配的内存用delete [] 来逐个释放。 delete与delete[]需要注意的地方 1:首先来说一个大家容易忽略的问题: 定义:int *p=new int; 这个大家一看就知道,在内存中分配了一个int类型的空间,没错。但是我想说的是,操作系统在堆在分配了一个int类型空间给p指向的空间,但是p本身的值是在栈上,我觉的明白这个很重要。比如,你需要处理一个海量数据,这个数据需要用二维数组来表示,你如果这样定义int *ptr[MaxNum],然后再循环为每个ptr[0~MaxNum-1]分配空间,这个时候容易隐含一个错误,我们知道内存中栈的大小大约就2M左右,而堆很大,几乎没有限制,当你的MaxNum很大的时候,就会导致内存溢出,因为ptr这个值的本身是在栈上的,而栈的大小就2M左右,而你又有这么多个地址要存放,所以会出错。解决办法有二个:一:用一维数据代替二维数组;二:定义一个二维指针; 然后再动态分配。 2:delete与delete[]执行遇到的问题: ① int *p=new int[100];

Python-常见面试题

杀马特。学长 韩版系。学妹 提交于 2020-03-11 08:59:59
什么是Python Python是一种解释型语言,也就是说,它和C语言以及C的衍生语言不通,Python代码在运行之前不需要编译 Python是一种动态类型语言,指的是,你在声明变量时不需要指定变量的类型 Python让困难的事变的容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节 Python用途非常广泛–网络应用,自动化,科学建模,大数据应用等等,它也常被用作“胶水语言”,用于帮助其他语言和组件改善运行状况 Python支持的数据类型 数字、字符串、元组、字典、列表 下划线的作用 _xxx:表示的是protected类型,即只允许其本身和子类进行访问 __xxx:表示的是private类型 __xxx__:表示的特列方式,如__init__ 如何生成一个不可变集合 使用 frozenset 函数,将一个列表变成一个不可变的集合,如下: s = frozenset([1, 2, 3]) is与== is对比地址,==是对比值 多线程与多进程 对比维度 多进程 多线程 数据共享、同步 数据共享复杂,需要用到IPC;数据是分开的、同步简单 因为共享进程数据,所以共享简单,但也因为这个导致同步复杂 内存、CPU 占用内存多,切换复杂,CPU利用率低 占用内存小,切换简单,CPU利用率高 创建、销毁、切换 创建销毁、切换复杂,速度很慢 创建销毁、切换简单,速度很快 编程

【asp.net core】实现动态 Web API

耗尽温柔 提交于 2020-03-10 13:02:14
序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了。之前在用 ABP 框架 (旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApplicationService 的空接口就可以变成 Web API,可惜的是之前一直没空去研究这一块的原理及其实现,园子里也找不到相关实现原理的文章(旧版 ABP 的倒是有,但是 asp.net core 无法参考)。最近闲起来,就看了一下 abp vnext 的源码,并且也参考了一下 晓晨Master 介绍的 Panda.DynamicWebApi 。我自己也简单实现了一遍动态 Web API,不禁感叹 asp.net core 设计之精妙。 abp vnext : https://abp.io Panda.DynamicWebApi : https://github.com/pdafx/Panda.DynamicWebApi 这里先感谢这两个库的相关人员,没有他们的工作,本文也出现不了。 另外在此声明,本文意在探究其实现原理并实现一个简易版本,若无把握请勿用于生产环境。 正文: 首先先创建我们的解决方案如下: 因为动态 Web API 这一功能是与业务无关的,而且为了复用,我们应该把这一功能的实现写到一个单独的类库当中。上图中 Demo 项目是 asp.net core 3.1

C与C艹的内存管理方式

自古美人都是妖i 提交于 2020-03-10 08:57:12
  C 内存开辟出的空间一般可以分成: 代码段,数据段( 初始化的数据段, 为初始化的数据段BSS ),堆,栈   代码段 :保存程序文本,指令指针EIP就是指向代码段,可读可执行不可写   数据段 :保存初始化的全局变量和静态变量,可读可写不可执行   BSS :未初始化的全局变量和静态变量   堆(Heap) :动态分配内存,向地址增大的方向增长,可读可写可执行     栈(Stack) :存放局部变量,函数参数,当前状态,函数调用信息等, 向地址减小的方向增长 ,非常非常重要,可读可写可执行      最特别的是 栈stack ,它和别人是反着的!在Windows平台上,栈都是从上(高)向下(低)生长的!。   关于函数调用举个例子: int i= 0x22222222; char szTest [] = "aaaa";//a的ASCII码为0x61 func(i, szTest);   当访问进入func函数时,栈中的形式为(左侧地址 右侧数据):   0x0013FCF0 0x0013FCF8   0x0013FCF4 0x22222222   0x0013FCF8 0x61616161 PS: c++中语句解析顺序和函数调用时候顺序一致:由右向左! 比如如下语句,在输入vector为空时会造成 访问越界! void numIslands(vector<vector

new/delete和malloc/free

北城余情 提交于 2020-03-10 08:56:11
首先我们来谈谈malloc与free malloc和free是C函数库提供的两个函数,malloc从堆上(也叫自由存储区)分配一块合适的内存,程序返回一个指向这块内存的地址。free函数把它归还给内存池供以后使用。 注意的是这块内存并没有以任何形式进行初始化,如果进行初始化:要么自己动手进行初始化,要么使用calloc函数。 两个函数原型: void *malloc(size_t size); void free(void *pointer); malloc的参数就是需要分配的内存字节数(注意malloc不能自动计算字节大小,必须直接传字节数),如果内存池的内存满足这个需求,malloc就会返回一个指向被分配的内存块起始位置的指针;如果内存池为空或者不能满足你的分配需求,malloc将返回一个NULL指针( 这点很重要,每个从malloc分配的内存返回的指针用的时候都要检查是否为NULL )。 free函数的参数要么是NULL(不会产生任何效果),要么就是就是先前从malloc返回的值。只有这两种。释放一块内存的一部分是不允许的,动态分配的内存必须整块一起释放,但是有realloc的特性(缩小一块动态分配的内存),可以有效的释放他尾部的部分内存 注意观察的人会发现malloc返回的是一个 void*,那我们在内存上存储整数,浮点数和其他类型的时候该怎么办?

数据库操作:事务处理

夙愿已清 提交于 2020-03-09 16:02:30
并非所有引擎都支持事务处理,MyISAM不支持,InnoDB支持。 事务处理可以用来维护数据库的完整性,它保证成批的MySQL操作要么都执行,要么都不执行。 事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行。 相关术语 1.事务(transaction):指一组SQL语句。 2.回退(rollback):指撤销指定SQL语句的过程。 3.提交(commit):指将为存储的SQL语句结果写入数据库表。 4.保留点(savepoint):指事务处理中设置的临时占位符,可以对它发布回退(与回退整个事务处理不同)。 管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。 START TRANSACTION :标记事务的开始。 ROLLBACK :回退操作。 SELECT * FROM ordertotals; START TRANSACTION; DELETE FROM ordertotals; SELECT * FROM ordertotals; ROLLBACK; SELECT * FROM ordertotals; 第一条语句显示ordertotals表的全部内容,然后开始事务处理

Oracle学习(3)

爱⌒轻易说出口 提交于 2020-03-09 12:15:23
2) insert 插入语句 – 结合默认值default和非空约束not null SQL > create table user2 ( id number ( 4 ) default 1001 , name varchar2 ( 10 ) , password varchar2 ( 10 ) not null ) ; 3) insert插入语句 – 日期相关 如果插入的列有日期字段,需要考虑日期的格式 默认格式: ‘DD-MON-RR’ ‘1-3月-20’ 如果自定义日期格式,需要用to_date函数转换。 bir 代表时间字段 to_date(‘2020/3/1’,’ YYYY/MM/DD’) YYYY/MM/DD SQL > 1 、alter table user2 add ( bir date ) ; 给user2表增加一列bir,日期date类型 2 、select sysdate from dual ; 查询系统时间 3 、insert into user2 ( id , name , password , bir ) values ( 3 , 'ww' , 'abc123' , '02-3月-20' ) ; 按照默认日期格式插入日期 4 、 insert into user2 values ( 4 , ’dc’ , ’ 888888 ’ , to_date ( ‘

axios 中请求格式规范

ⅰ亾dé卋堺 提交于 2020-03-09 11:11:36
https://blog.csdn.net/chenshanqiang/article/details/103302324 1、GET:查询数据 1.1、通过URL传递参数 //前端 axios.get('/path?id=123').then(function(ret){ //ret是对象 console.log(ret.data) }) //服务器 app.get('/path',(req,res)=>{ res.send('axios get 传递参数'+req.query.id) }) //前端 axios.get('/path/123').then(function(ret){ //ret是对象 console.log(ret.data) }) //服务器 app.get('/path/:id',(req,res)=>{ res.send('axios get (Restful) 传递参数'+req.params.id) }) 1.2、通过params选项传递参数 //前端 axios.get('/path',{ params:{ id:123 } }).then(function(ret){ console.log(ret.data) }) //服务器 app.get('/path',(req,res)=>{ res.send('axios get 传递参数'+req