l new操作符(new operator)

string *ps = new string(“Memory Management”);

这里的new是由语言内建的,我们成为new关键字。new操作符做了两件事情:

1、在堆上分配足够的内存,用来放置某类型的对象;使用operator new进行内存空间分配。

2、调用constructor构造函数,为刚刚分配的内存空间设置初值。

new操作符的行为是语言内建的,无法对其行为进行改变。

l new函数(operator new)

声明如下:

void * operator new(size_t size);//是不是很像C中的malloc。

是的,我们可以将operator new函数类比于C中的malloc函数。

operator new只做了一件事情,就是分配内存空间,但是没有构造函数,也就是没有完成对分配空间的初始值设定。但是operator new可以重载。

所以在使用operator new之后一般接下来会对分配的内存空间进行初值设定。

char *memory = (char*) operator new(sizeof(char)*15);//类似于malloc

strcpy(memory, “hello world”);

l Placement new:在已分配的内存(堆和栈)中构造对象

new (buffer) type(size_t size);

int data = 123456;

int *pa = new(&data) int;//pa指针将指向data对象,里面的内容与data保持一致,没有进行覆盖。

int *pb = new(&data) int(123);//pb指针同样指向data对象,里面的内容将用123进行覆盖。

l delete释放内存,调用类的析构函数

delete p;//or delete [] p;

调用delete后,只是告诉了系统被delete掉的地址空间可以进行重新分配了。但是并未将p中的地址清除,也就是在delete后使用*p还是能够得到内容,但是其中的内容就不可以预测了,可能系统重新将之前的内存空间分配出去,并设置了其他的值。所以在delete之后我们一般会将对应的delete对象设置为null。

delete p;

p = null;

l delete函数(operator delete)

p->~string();

operator delete(p);

最后一步也是讲p重置为null,不过这步可以在析构函数中完成。

C++ new 和 delete的更多相关文章

  1. 如何区别数据库删除语句drop与delete与truncate?

    1.delete:删除数据表中的行(可以删除某一行,也可以在不删除数据表的情况下删除所有行) 删除某一行:delete from 数据表名称 where 列名称=值: 删除所有行:delete*fro ...

  2. 数据库设计中的Soft Delete模式

    最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文 ...

  3. 关于JavaScript中的delete操作

    关于JavaScript中的delete操作 看到一道题,是这样的: (function(x){ delete x; return x; })(1); 1 null undefined Error 我 ...

  4. Git异常:Cannot delete the branch 'test1' which you are currently on

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  5. HTTP Method详细解读(`GET` `HEAD` `POST` `OPTIONS` `PUT` `DELETE` `TRACE` `CONNECT`)

    前言 HTTP Method的历史: HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这三个方法 HTTP 1.1 这个版本是当前版本,包含GET HE ...

  6. IIS7.5上的REST服务的Put,Delete操作发生HTTP Error 405.0 - Method Not Allowed 解决方法

    WebDAV 是超文本传输协议 (HTTP) 的一组扩展,为 Internet 上计算机之间的编辑和文件管理提供了标准.利用这个协议用户可以通过Web进行远程的基本文件操作,如拷贝.移动.删除等.在I ...

  7. ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法

    原文 Examining the Details and Delete methods 作者 Rick Anderson 翻译 谢炀(Kiler) 校对 许登洋(Seay).姚阿勇(Mr.Yao) 打 ...

  8. new/delete重载

    在c++中,有时我们需要在运行阶段为一个变量分配未命名的内存,并使用指针来访问它,这里就可以用到new关键字.另外需要指出的是,new分配的内存块通常与常规变量分配的内存块不同,常规变量的值都储存在被 ...

  9. EC笔记:第三部分:16成对使用new和delete

    我们都知道,申请的资源,使用完毕后要释放.但是这个释放动作,一定要注意. 举个例子,很多人动态分配的资源,在使用之后,往往直接调用了delete,而不管申请资源的时候用的是new还是new[]. 如下 ...

  10. Spring boot: Request method 'DELETE' not supported, Request method 'PUT' not supported, Request method 'POST' not supported

    GET,POST,PUT,DELETE, Spring都支持,不要怀疑Spring, 一定是前端发送的rest 请求和后端的响应不匹配, 查找原因以及解决办法, 很简单 用chrome打开F12控制台 ...

随机推荐

  1. Visual Studio 最新插件

    Resharper 最新版本下载 https://www.jetbrains.com/resharper/ 破解方法 安装完成后,打开vs  弹出注册窗口选择Activate>License S ...

  2. eventFlow 系列 <三> 查询所有

    接着上面的例子,产生2条数据.怎么把这两条数据查询出来呢? var commandBus = resolver.Resolve<ICommandBus>(); , ); var execu ...

  3. Intellij IDEA 快捷键大全【转】

    IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文 ...

  4. Oracle 11G 数据库迁移【expdp/impdp】

    转自:http://www.th7.cn/db/Oracle/201802/263773.shtml 0x01 环境 A 机器,操作系统 CentOS7.3,Oracle版本:11G,IP地址:192 ...

  5. 下拉框选择 <from:select>

  6. Android Parcelable 序列化复杂数据结构

    参考博文 http://blog.csdn.net/yangzl2008/article/details/7593226 由于项目需要,Activity之间要传递一个特别复杂的数据结构对象,由于以前序 ...

  7. XML文件解析之SAX解析

    使用DOM解析的时候是需要把文档的所有内容读入内存然后建立一个DOM树结构,然后通过DOM提供的接口来实现XML文件的解析,如果文件比较小的时候肯定是很方便的.但是如果是XML文件很大的话,那么这种方 ...

  8. Django应用之content type(app应用之一django.contrib.contenttypes)

    当一张表作为多个表的FK(主键),并且只能选择其中一个或者几个时,就可以使用content_type表:例如下图的数据关系,因此就可以使用content_type表来将表与表中的对象进行关联,从而做到 ...

  9. 【问题】This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.

    转载请注明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9087725.html  这类问题归根到底就是软件源问题,Linux下安装软件不像windows.L ...

  10. 连接mongodb服务器

    连接mongodb有几种方法 一种是使用mongodb编译时生成的客户端进行连接,就是我们之前介绍过的mongo客户端 另一种是使用各种驱动进行连接 这次使用mongo客户端进行连接,之前我们启动了一 ...