目录
C++的内存管理方式相比较于C语言的malloc、realloc和calloc,C++引入了新的内存管理方式new与delete,相比较于C语言更加方便进行内存管理。
C++与C内管管理的区别:
1.在对于内置类型的内存开辟,new与malloc本质没有本质的区别。但是区别是当内存开辟失败的时候malloc返回的是NULL,而new则是抛异常。
2.在自定义类型的内存开辟中
malloc会在堆上开辟空间,并使用一个指针指向这个空间,但对于自定义类型中的内置类型不会 进行初始化。
new会在堆上开辟空间,对自定义类型中的内置类型会调用自身的构造函数进行初始化操作。
3.malloc与free是函数,而new与delete是操作符
new与delete的底层操作:
new与delete是操作符,在调用时new是call operator malloc,delete是call operator free进行操作
operator new/delete:
operator new的底层是使用malloc进行调用,当malloc成功返回,当失败时抛异常。
operator delete的底层同理。
void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)
{
// try to allocate size bytes
void *p;
while ((p = malloc(size)) == 0)
if (_callnewh(size) == 0)
{
// report no memory
// 如果申请内存失败了,这里会抛出bad_alloc 类型异常
static const std::bad_alloc nomem;
_RAISE(nomem);
}
return (p);
}