定位 new 运算符
2016-01-30 19:50
323 查看
定位 new 运算符:
和普通的new 运算符在堆上随机分配内存相比,定位 new 运算符可以在特定的地址位置
定位 new 运算符的具体使用实例:
定位new 的其他形式,定位 new 运算符其实是 new 的重载实现,通过 new函数 以 void* 形式返回申请到的地址,不能使用delete 进行空间的释放
和普通的new 运算符在堆上随机分配内存相比,定位 new 运算符可以在特定的地址位置
定位 new 运算符的具体使用实例:
const int BUF = 512; const int N = 5; char buffer[BUF]; void Part9::newplace(){ double *pd1, *pd2; int i; cout<<"Calling new and placement new:\n"; pd1 = new double ; //在 buffer 上给指针申请空间 pd2 = new (buffer) double ; //use buffer array for(int i = 0; i < N; i++) pd2[i] = pd1[i] = 1000 + 20.0*i; cout<<"Memory addresses:\n"<<" heap:"<<pd1<<" static:"<<(void *)buffer<<endl; cout<<"Memory contents:\n"; for(i = 0; i < N; i++){ cout<<pd1[i]<<" at "<<&pd1[i]<<"; "; cout<<pd2[i]<<" at "<<&pd2[i]<<endl; } cout<<"\nCalling new and placement new a second time:\n"; double *pd3, *pd4; pd3 = new double ; //find new address pd4 = new (buffer) double ; //overwrite old data for(i = 0; i < N;i++) pd4[i] = pd3[i] = 1000 + 40.0 * i; cout<<"Memory contents:\n"; for(i = 0; i < N; i++){ cout<<pd3[i]<<" at "<<&pd3[i]<<"; "; cout<<pd4[i]<<" at "<<&pd4[i]<<endl; } cout<<"\nCalling new and placement new a third time:\n"; delete [] pd1; pd1 = new double ; pd2 = new (buffer + N*sizeof(double)) double ; for(i = 0; i < N; i++) pd2[i] = pd1[i] = 1000 + 60.0*i; cout<<"Memory contents:\n"; for(i = 0; i <N;i++){ cout<<pd1[i]<<" at "<<&pd1[i]<<"; "; cout<<pd2[i]<<" at "<<&pd2[i]<<endl; } delete [] pd1; delete [] pd3; }调用主函数:
#include <iostream> #include <new> using namespace std; int main() { newplace(); return 0; }
定位new 的其他形式,定位 new 运算符其实是 new 的重载实现,通过 new函数 以 void* 形式返回申请到的地址,不能使用delete 进行空间的释放
int *p1 = new int; //调用 new(sizeof(int)) int *p2 = new (buffer) int; //调用 new(sizeof(int), buffer) int *p3 = new (buffter) int[40]; //调用 new(sizeof(40*sizeof(int)), buffer)</span>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性