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; } |
- 2 回答
- 0 关注
- 4408 浏览
添加回答
举报
0/150
提交
取消