标签:操作符 初始化 log 移动 address 常量 运算符 知识 表达
1.综述
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc /free.
3,因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
4,C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存
new 是个操作符,和什么"+","-","="……有一样的地位。
malloc是个分配内存的函数,供你调用的。
new是保留字,不需要头文件支持。
malloc需要头文件库函数支持。
new 建立的是一个对象,
malloc分配的是一块内存。
new建立的对象你可以把它当成一个普通的对象,用成员函数访问,不要直接访问它的地址空间
malloc分配的是一块内存区域,就用指针访问好了,而且还可以在里面移动指针。
简而言之:
new 是一个操作符,可以重载
malloc是一个函数
new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数
malloc仅仅分配内存,free仅仅回收内存
<1>单个对象的动态分配
int *pi = new int(11); // initializer
int *q = new int; //assign
*q = i;
<2>数组的动态分配
int *pi = new int[11]; // 分配有11个元素的动态数组
int (*pia)[11] = new int [22][11]; //分配一个含有 22 * 11 个元素的二维数组
for(int i = 0; i < 11; i++)
pi[i] = 0;
---------------------
常量对象的动态分配
const int *pic = new const int(1024);
<3>定位new表达式(placement new expression)
形式: new (place_address) type-specifier
头文件: #include <new>
place_adress必须是指针
eg:
int *buf = new int[2];
int *pb = new (buf) int;
*pb = 11;
cout << *pb << endl; // 11
cout << *buf << endl; // 11
cout << pb << endl; // 同样pb跟buf的所指向的地址也是相同的
cout << buf << endl; //
int *pp = new (buf + 1) int;
*pp = 22;
标签:操作符 初始化 log 移动 address 常量 运算符 知识 表达
原文地址:http://www.cnblogs.com/chulia20002001/p/6829064.html