温温酱
new是C++中用于动态内存分配的运算符,在C语言中一般使用malloc函数。new有三种用法:new operator、operator new、placement new1、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;}