前言
提示:这里可以添加本文要记录的大概内容:
C语言中,动态的申请内存使用的是malloc、calloc、realloc三个函数,释放使用的是free函数。C++在此的基础上进行了升级,使用new和delete对内存进行管理。
提示:以下是本篇文章正文内容,下面案例可供参考
一、malloc、calloc、realloc的函数原型以及使用的区别
1、函数原型
malloc: void *malloc( size_t size );
calloc: void *calloc( size_t num, size_t size );
realloc: void *realloc( void *memblock, size_t size );
2、使用区别
malloc的参数是要开辟的大小,calloc的第一个参数是开辟的个数,第二个参数是开辟的大小,而当我们要更改开辟的动态内存大小的时候,使用的是realloc,该函数的第一个形参是更改内存的地址,第二个形参是更改后的大小。三个函数申请失败时返回值为NULL,所以在使用之后需要判断返回值。
二、new和delete
1、申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和
delete[]。
int main()
{
Test* p1 = new Test(9);
Test* p2 = new Test[10];
delete p1;
delete[] p2;
return 0;
}
2、new和delete的优点
2.1、使用简单,malloc只申请空间,free只释放空间,并不能调用构造和析构函数。而new首先会申请空间,在调用构造函数进行初始化,delete会西安调用析构函数释放指针所指空间,在释放new申请的空间。
2.2 malloc申请空间的时候,需要手动计算空间大小进行传递,new只需要在其后面跟空间的类型。
2.3、malloc的返回值为void*,在使用的时候需要进行强转,new不需要,但是new需要捕捉异常。
3.new和delete 的用法实例
#include<iostream>
using namespace std;
class Test
{
public:
Test(int data=0)
{
cout << "Test::Test" << endl;
}
~Test()
{
cout << "Test::~Test" << endl;
}
private:
int m_data=0;
};
int main()
{
Test* p1 = new Test(9);
Test* p2 = new Test[10];
Test* p3 = new Test;
delete p1;
delete[] p2;
delete p3;
return 0;
}
三、new/delete operator、operator new/delete、palacement new
1、new/delete operator
所谓的 new 表达式,就是我们做常用的用于分配动态对象的表达式,如下操作就是运用new表达式进行动态对象的分配。
2、operator new/delete
operator new / delete 负责向系统申请内存,一般由operator new / delete 申请的内存为原始内存,在该内存上并没有特定的对象,因此,对于用该运算符申请得到的内存我们需要手动为其构造对象,并手动的调用对象的析构函数。
operator new / delete 可以重载,通过重载,可以改变向内存申请内存的方式。在c++编译器的内部,实际上operator new / delete是通过调用C语言函数malloc / free 实现堆内存的申请和释放的。
3、palacement new
placement new 用于在一块已经分配了内存上构造某个对象,这就是为什么它会被称为placement new, palcement new 实际上并没有向内存申请内存空间,他仅是负责在一块已经分配的内存上构造对象。上面的代码我们已经获得一块原始内存,因此我们需要在上述的代码中构造相应的对象,因此我们需要先将原始内存强制转换相应的类型,然后通过placement new在上面构造对象。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。