C++内存管理笔记

C++ memory primitives

分配 释放 类属 可否重载
malloc() free() C函数 不可
new delete C++表达式 不可
::operator new ::operator delete C++函数
allocate<T>::allocate() allocate<T>::deallocate() C++标准库 可自由设计并搭配容器
void *p=malloc(512);
free(p);

obj *p=new obj(1);
delete(p);

void *p=::operator new(512);
::operator delete(p);

new expression

当通过new创建对象的时候,编译器将new转为三个步骤

obj *p=new obj(1);

void *men=operator new(sizeof(obj));
p = static_cast<obj*>(men);
p->obj::obj(1);

delete expression

当通过delete释放对象的时候,先析构,在释放内存

delete p;

p->~obj();
operator delete(p);

你可能感兴趣的:(C++)