C语言new函数的使用 c new函数( 四 )


buffer = new(buffer) string("abc"); //调用了placement new,在buffer所指向的内存中初始化string类型的对象,初始值是"abc"
事实上,placement new也是new表达式的一种,但是比普通的new表达式多了一个参数,当然完成的操作和返回值也不同 。
因此上面new的第一种用法可以分解两个动作,分别为后面的两种用法 。
与new对应的delete没有三种语法,它只有两种 , 分别是delete operator和operator delete , 也称为delete表达式和delete操作符 。delete表达式和new表达式对应 , 完成对象的析构和内存的释放操作 。而delete操作符只是用于内存的释放 , 和C语言中的free相似 。例如:
string* ps = new string("abc");
...
delete ps; //调用delete表达式 , 先析构再释放
void* buffer = operator new(sizeof(string));
...
operator delete(buffer); //释放
placement new是在指定位置初始化对象 , 也就是调用了构造函数 , 因此与之对应的就是析构函数了,只不过它不叫placement delete而已 。
void *pv = operator new(sizeof(vectorint));
pv = new(pv) vectorint(8, 0);
...
static_castvectorint* (pv)-~vector(); // call destruct function
operator delete(pv); // free memory
pv = NULL;
C语言new函数到底应该怎么使用?C语言中没有new函数,但是有malloc函数
原型:void *malloc(unsigned int size);
#includestdlib.h或#include malloc.h
malloc 向系统申请分配指定size个字节的内存空间(连续的一块内存) 。返回类型是 void* 类型 。void* 表示未确定类型的指针 。
malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的 。
申请零字节内存 , 函数并不返回NULL,而是返回一个正常的内存地址 , 但是你却无法使用这块大小为0的内存 。
#include stdio.h
#include conio.h
int main(void)
{
int i,n;
char *buffer;
printf("How long do you want the string ?");
scanf("%d",i);
buffer=(char *)malloc(i+1);
if (buffer == NULL)
{
exit(1);
}
for (n=0;ni;n++)
{
buffer[n]=rand()%26+'a';/*generate 0-25 */
}
buffer[i]='\0';
printf("Random string :%s\n",buffer);
free(buffer);
getch();
return 0;
}
c++中有new函数
new可用来生成动态无名变量 。
使用完动态无名变量后应该及时释放,要用到 delete 运算符 。
int *p=new int [10]; //动态数组的大小可以是变量或常量;
C语言:编写一个函数new 对n个字符开辟连续的存储空间在纯粹C编译器下,用new作函数名是可以的,但在与C++兼容的编译器下 , 是不可能通过编译的,因为new是C++的申请内存操作符,属保留字,不能由用户用作标识符 。这里将new改为mynew,举例代码如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
char *mynew(int n){
char *p;
if(p=(char *)malloc(n))
return p;
else return NULL;
}
int main(void){
char *p=mynew(20);//申请20个连续字节空间
if(p){//若申请成功
strcpy(p,"1234567890");//向申请的空间写入字符串
printf("%s\n",p);//打出来看看
free(p);//释放申请的空间
}
else printf("Application memory failure...\n");
return 0;
}
c语言这new是什么作用new是C++中用于动态内存分配的运算符 , 在C语言中一般使用malloc函数 。
有三种用法:new operator、operator new、placement new
1)new operator:
new operator是最常见的用法,如 Emp* e1 = new Emp;(Emp是一个类) 这里new有两种作用:分配空间、初始化对象(调用了构造函数)

推荐阅读