C++学习笔记(四)

C++学习笔记

提示:本笔记是个人学习侯捷C++课程的总结笔记,欢迎来信指正批评!
第一篇 拷贝构造、拷贝赋值、析构
第二篇 堆、栈与内存管理



提示:以下是本篇文章正文内容,下面案例可供参考

堆、栈

栈(Stack)是存在于某作用域的一块内存空间,当调用函数时,函数本身也会形成一个stack放置接收的参数,以及返回地址。在函数本体内申明的任何变量,其所使用的内存块都是stack。
堆(Heap)是指由操作系统提供的一块global内存空间,程序可动态分配从中获得若干块。

class Complex { …… };
……
{
	Complex c1(1,2);	/*存储在Stack中,离开作用域后该内存释放,析构被调用*/
	static Complex c2(1,2);	/*静态变量在作用域结束之后仍然存在,直到整个程序结束*/
	Complex* p = new Complex(3);	/*存储在heap中,需要手动释放delete,否则指针消亡,但是内存未释放*/
	delete p;						/*delete调用complex析构函数,防止内存泄漏*/
}
Complex	c3(1,2);	/*全局对象*/
int main()
{
}

内存分配

new所作的操作具体为:

Complex* pc = new Complex(1,2);
/*等价于*/
Complex* pc;
void* mem = operator new (sizeof(Complex));	/*调用malloc(n),分配内存*/
pc = static_cast<Complex*>(mem);		/*转型,将mem从void转化为Complex*/
pc->Complex::Complex(1,2);

内存释放

delete所作的操作具体为:

delete pc;
/*等价于*/
Complex::~Complex(pc);	/*调用析构函数*/
operator delete(pc);	/*释放内存,其内存调用free(pc)*/

总结

1.创建对象的时效,根据对象类型不同而不同。内联函数创建会在作用域之后自动释放,new创建需要手动delete释放,static会一直到程序结束。
2.delete与new连用;new []与delete[]连用,防止内存泄漏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值