为了账号安全,请及时绑定邮箱和手机立即绑定

C语言中new的用法?

C语言中new的用法?

C++
慕森卡 2019-01-27 14:10:45
C语言中new的用法
查看完整描述

2 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

new是C++中用于动态内存分配的运算符,在C语言中一般使用malloc函数


new有三种用法:new operator、operator new、placement new


1、new operator:

new operator是最常见的用法,如 Emp* e1 = new Emp;(Emp是一个类) 这里new有两种作用:分配空间、初始化对象(调用了构造函数)


2、operator new:

operator new作用是只分配空间,不调用构造函数,如:Emp* e2 = (Emp*)operator new(sizeof(Emp));


3、placement new:

placement new作用是在已分配好的空间上初始化对象,不分配空间,调用拷贝构造函数,如:new ((void *)e2) Emp(*tb1);


示例代码如下:

123456789101112// Emp.h#ifndef _EMP_H_#define _EMP_H_  class Emp{public:Emp();Emp(const Emp& other);~Emp();};#endif // _EMP_H_


1234567891011121314151617181920212223242526272829303132333435// Emp.cpp#include “Emp.h”#include <iostream>using namespace std;Emp::Emp(){cout<<“Emp…”<<endl;}Emp::Emp(const Emp& other){cout<<“Copy Emp…”<<endl;}Emp::~Emp(){cout<<“~Emp…”<<endl;}// main.cpp#include “Emp.h”#include <iostream>void main(){using namespace std;// new operator 分配空间,调用构造函数Emp* e1 = new Emp;// operator new 只分配空间Emp* e2 = (Emp*)operator new(sizeof(Emp));// placement new 不分配空间,调用拷贝构造函数new ((void *)e2) Emp(*e1);// 显示调用析构函数e2->~Emp();// 仅释放空间,不调用析构函数operator delete(e2);// 调用析构函数,释放空间delete e1;}



查看完整回答
反对 回复 2019-03-10
  • 2 回答
  • 0 关注
  • 4408 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信