C++函数——内联函数、动态内存管理

内联函数

在函数声明或定义时,将inline关键字加在函数返回类型前面就是内联函数。

#include 
using namespace std;

inline int add(int x, int y) {
	return x + y;
}
int main(int argc, const char *argv[])
{
	int a = 10, b = 20;
	int ret = add(a, b);//翻译为int ret = 10 + 20;只适合简单几行代码时使用

	cout << ret << endl;
	return 0;
}

作用:提高代码执行效率;不需要监理函数调用时的运行环境,不需要进行参数传递,不需要跳转。

  • 注意:、
  • inline关键字只是建议编译器做内联优化,编译器不一定做内联
  • 内联函数的声明或定义必须在函数定义之前完成
  • 一般几行代码适合作为内联函数,像递归函数包含循环switch goto循环不适合做内联函数。

动态内存管理

new和delete函数

在C语言中,如果需要使用堆内存,程序员可以用函数malloc()从堆中分配指定大小存储区域,用完之后必须用free()将之归还系统。如果用完之后没用free()释放,就会造成内存泄露。

malloc()函数的使用比较麻烦,除了需要计算需求内存的大小之外,还必须堆获得的内存进行类型转换。为此C++提供了new和delete两个运算符。

new的用法

  • p = new type
  • p = new type(x)
  • p = new type[n]

其中p是指针变量,type是数据类型。用法1 只分配内存,用法2 将分配的堆内存初始化为x,用法3分配具有n个元素的数组。分配不成功返回空指针(NULL)

int main(int argc, const char *argv[])
{
	int *p, *p1, *p2, *p3;
	

	p1 = new int;//申请int类型的空间
	p2 = new int(123);//初始化申请的内存空间为123;
	p3 = new int[10];//申请123个int类型的内存空间,此为数组
	p = (int *)malloc(sizeof(int));//C语言的方法申请内存,后面必须free释放内存

	/*释放内存空间
	 *当delete p3 写法为释放一个int类型的内存p3[0],其余内存空间未释放,造成内存泄露
	 * */
	free(p);//C语言方法释放内存

	delete p1;
	delete p2;
	delete[]p3;

	cout << p1 << "  " << p2 << " " << p3 << " " << p << endl;


	return 0;
}

你可能感兴趣的:(c++,开发语言)