new[]/delete[]与new/delete区别
new[]/delete[]与new/delete完全不同
-动态对象数组创建通过new[] 完成
-动态对象数组的销毁通过delete[]完成
-new[]/delete[]能够被重载,进而改变内存管理方式
new[]/delete[]的重载方式
//static member function
void* operator new[](unsigned int size)
{
return malloc(size);
}
//static member function
void operator delete[](void* p)
{
free(p);
}
注意事项:
-new[]实际需要返回的内存空间可能比期望的要多
-对象数组占用的内存中需要保存数组信息(数组的长度,因为编译器要为我们自动的调用构造函数和析构函数,如果不知道这个值,编译器无法知道调用几次构造和析构函数)
-数组信息用于确定构造函数和析构函数的调用次数
动态数组的内存管理
#include <iostream>
#include <string>
#include <cstdlib> using namespace std; class Test
{
private:
int m_value;
public: Test()
{
m_value = 0;
}
void* operator new(unsigned int size)
{
cout << "operator new :" << size <<endl; return malloc(size);
} void operator delete(void* p)
{
cout << "operator delete:" << p << endl;
free(p);
} void* operator new[](unsigned int size)
{
cout << "operator new[] :" << size <<endl; return malloc(size);
} void operator delete[](void* p)
{
cout << "operator delete[]:" << p << endl;
free(p);
} }; int main()
{
Test* pt = NULL; pt = new Test;
delete pt; pt = new Test[5];
delete[] pt; return 0;
}
从打印结果看,new[]实际需要返回的内存空间没有比期望的多,就是20个字节。这是由于编译器的不同而造成的。
new[]/delete[]的重载方式//static member functionvoid* operator new[](unsigned int size){return malloc(size);}
//static member functionvoid operator delete[](void* p){free(p);}
new[]/delete[]与new/delete区别的更多相关文章
- truncate与delete 、drop的区别
注意事项 1.在oracle中数据删除后还能回滚是因为它把原始数据放到了undo表空间. 2.DML语句使用undo表空间,DDL语句不使用undo, 而delete是DML语句,truncate是 ...
- oracle中drop、delete和truncate的区别
oracle中drop.delete和truncate的区别 oracle中可以使用drop.delete和truncate三个命令来删除数据库中的表,网上有许多文章和教程专门讲解了它们之间的异同,我 ...
- c/c++ 复习基础要点01-const指针、指针函数 函数指针、new/delete与malloc/free区别与联系
1. 引用本身是有指针实现的:引用为只读指针 例子: int d=123; int& e=d; //引用 int * const e=d; //只读指针,e指向d,不可修改e指 ...
- Delete和Truncate的区别
原文:Delete和Truncate的区别 一般对于没有用的数据,都会经行删除,而删除通常使用的是DELETE和TRUNCATE命令.对于有条件地删除,基本上就会使用DELETE,当然还是没有绝对,用 ...
- delete p和delete [] p的区别(转)
operator new 和 operator delete函数有两个重载版本,每个版本支持相关的new表达式和delete表达式: void* operator new (size_t); // a ...
- 数据库中drop、delete与truncate的区别
数据库中drop.delete与truncate的区别 drop直接删掉表: truncate删除表中数据,再插入时自增长id又从1开始 :delete删除表中数据,可以加where字句. (1) D ...
- mysql 删除表记录 delete和truncate table区别
MySQL中删除表记录delete from和truncate table的用法区别: mysql中有两种删除表中记录的方法: (1)delete from语句, (2)truncate table语 ...
- truncate delete 与 drop的区别
一张表几亿条数据.根据task_id删除几千万. delete删除后查询,发现查询速度还是没有变快.explain查看 rows并没有发生变化.查询速度肯定也不会变化.原因? truncate del ...
- new/delete和malloc/free区别与联系
1.基本概念 malloc/free (1).函数原型及说明 void *malloc(long NumBytes): 该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则 ...
- 转:解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别 标准Http协议支持六种请求方法,即: 1.GET 2.POST 3.PUT 4.Delete 5.HEAD ...
随机推荐
- Jupyter使用快捷键
命令行模式(按 Esc 生效) F: 查找并且替换 Ctrl-Shift-F: 打开命令配置 Ctrl-Shift-P: 打开命令配置 Enter: 进入编辑模式 P: 打开命令配置 Shift-En ...
- python的web框架知识点
一个完整的web应用:服务器收到来自浏览器的一个请求,服务器将请求内容的网页返回给浏览器,让浏览器显示出来.[而浏览器与服务器之前的传输协议是HTTP] HTTP是一个基于TCP/IP通信协议来传递数 ...
- videojs文档翻译Guides-Plugins
Video.js Plugins Video.js的一大优势在于其插件生态系统,允许来自世界各地的作者分享他们的视频播放器定制.这包括从最简单的UI调整到新的播放技术和资源处理程序的一切! 因为我们将 ...
- php cookie赋值使用
setcookie('username',$user,time()+3600*24); //cookie赋值 public function login(){ //cookie 使用 ...
- 大数据学习(03)——HDFS的高可用
高可用架构图 先上一张搜索来的图. 如上图,HDFS的高可用其实就是NameNode的高可用. 上一篇里,SecondaryNameNode是NameNode单节点部署才会有的角色,它只帮助NameN ...
- scrapy 使用crawlspider rule不起作用的解决方案
一直用的是通用spider,今天刚好想用下CrawlSpider来抓下数据.结果Debug了半天,一直没法进入详情页的解析逻辑.. 爬虫代码是这样的 # -*- coding: utf-8 -*- i ...
- Sqlserver 关于varchar(max) 笔记
看SQL server的版本,SQLserver2005以上 的nvarchar(max) 可以存放2G的内容,所以要是 SQL2005以上的nvarchar(max)足够你用的了.用nvarchar ...
- 指向结构的指针 struct结构名称 *结构指针变量名
//指向结构的指针 struct结构名称 *结构指针变量名 //(*结构指针变量名).成员变量名//结构指针变量->成员变量名 1 #include<stdio.h> 2 #incl ...
- 面试必知道的APP测试adb命令
查看当前连接设备: adb devices 如果发现多个设备: adb -s 设备号 其他指令 查看日志: adb logcat 安装apk文件: adb install xxx.apk 此安装方式, ...
- 记一次mysql事务未提交导致锁未释放的问题
记一次mysql事务未提交导致锁未释放的问题 ## 查看未提交的事务(3秒内未操作的事务) SELECT p.ID AS conn_id, P.USER AS login_user, P.HOST A ...