一、背景
Complex* pc = new Complex(1, 2);
String* ps = new String("hello");
...
delete ps;
上面是一个普遍的new 和 delete 语句,到底new是如何实现的呢?
二、原理
2.1New
Complex* pc;
void* mem = operator new( sizeof(Complex) ); // 分配内存
pc = static_cast<Complex*>(mem); // 转型
pc->Complex::Complex(1, 2); // 构造函数
2.2Delete
String::~String(ps); // 析构函数
operator delete(ps); // 释放内存
class String
{
public:
~String()
{ delete[] m_data; }
...
private:
char* m_data;
};
注意:
operator new 和 operator delete 是C++里面一个特殊函数!!!
其先内部调用 malloc(n) 和 free(ps)