8.了解各种不同意义的new和delete
来源:互联网 发布:阿里云招聘 网络 编辑:程序博客网 时间:2024/06/11 19:34
new operator和 operator new的区别
通常我们使用的new是new operator。不能改变其意义。new operator做两件事。1、分配足够放置对象的内存。2、调用一个constructor,为刚才分配的内存中那个对象设定初值。
operator new的声明如下: void *operator new(size_t size); 我们可以重载这个new。而这个函数所做的事是执行必要的内存分配动作。
简单的说就是new operator在第一步调用operator new,而后第二步调用constructor。
例如:string *ps = new string("ha ha");
则产生的行为如下:
void *memory = operator new(sizeof(string));
call string::string("ha ha");
static_cast<string *>(memory);
Placement new
对已经分配好的内存中构造对象。
Widget *ConstructWidgeInBuffer(void *buffer, int widgetSize)
{
return new (buffer) Widget(widgetSize); //在buffer这块内存中构造对象
}
删除与内存释放
string *ps; delete ps;
会造成编译器产生近似这样的代码:
ps->~string();
operator delete(ps);
void *buffer = operator new(50*sizeof(char));
... operator delete(buffer);
这组行为相当于调用malloc和free。
数组
string *ps = new string[10];
新版的编译器会加入operator new[]这一特性,主要是因为operator new只会调用一次constructor,new []会为每一个对象调用constructor。
总结
new operator和delete operator都是内建操作符,无法为你所控制,但可以定制内存分配\释放函数。
0 0
- 8. 了解各种不同意义的new 和 delete
- 8.了解各种不同意义的new和delete
- 条款8:了解各种不同意义的new和delete
- 条款8:了解不各种不同意义的new和delete 练习
- 《More Effective C++》8:了解各种不同意义的new和delete
- 条款八:了解不同意义的new和delete
- 了解各种不同意义的new
- 各种不同含义的NEW和DELETE
- 理解各种不同含义的new和delete
- 理解各种不同含义的new和delete
- 理解各种不同含义的new和delete
- C++中各种不同的new和delete
- 八 理解各种不同含义的new和delete
- 理解各种不同含义的new和delete
- malloc/free和new/delete的不同
- more effective c++笔记2-----Item M8:理 解各种不同含义的new和delete
- More Effective C++ ——08_理解各种不同含义的new和delete
- More Effective C++----(8)理解各种不同含义的new和delete
- 自定义openldap schema
- Cocos2d-x中的3D功能
- Linux内核源代码情景分析-内存管理之用户页面的换入
- JVM垃圾收集器
- Begining
- 8.了解各种不同意义的new和delete
- 修改Mysql的root密码及开启远程访问
- 数据库插入数据时间比较
- 革工程团队应对移动转型
- Java并发编程】之四:守护线程与线程阻塞的四种情况
- 00-自测3. 数组元素循环右移问题 (20)
- Linux程序设计(Linux shell编程五)
- UVALive - 4356 Fire-Control System 三角函数+暴力+剪枝
- Java虚拟机之运行时数据区域