在C++中,我们常会遇到三种new的形式:operator new 、new operator 、placement new
①new operator (new操作符):①申请空间 ②创建对象
图示步骤:
②operator new (操作符new): 申请空间
③placement new (定位new):对已申请的空间创建对象
格式:new(ptr)A("123") ptr---指向一块已经申请好的空间
总结:可以简单的认为②③是①操作的解刨。但在②③中,当需要释放空间时,需要显式调用对象的析构函数释放类实体成员申请的空间。
代码应用:
#include<iostream> using namespace std; //operator new //new operator //placement new //重载new operator void* operator new(size_t sz) { void* p = malloc(sz); return p; } void operator delete(void *p) { free(p); } void operator delete[](void *p) { free(p); } class String; ostream& operator<<(ostream& out, String& str); class String { public: friend ostream& operator<<(ostream& out, String& str); public: String(const char* str = "") { std::cout<<"contruct Object"<<std::endl; if (str == NULL) { m_data = new char[1]; m_data[0] = '