7- 8 拷贝构造、拷贝赋值、堆、栈、内存管理(强)等

1 带指针的类(拷贝构造、拷贝赋值、析构函数)

不带指针的类,可以用编译器默认的拷贝构造、拷贝赋值

拷贝构造:参数是自己这种东西

拷贝赋值:参数也是自己这种东西

 

带指针的类如果会进行赋值操作,那么就需要有拷贝构造函数,否则会造成内存泄漏:

 

 如上是浅copy:两个对象的指针指向同一块空间

深copy:拷贝构造

思考题:给b重新分配了一块空间,并把b的指针指向它,原先的world占有的空间不也泄漏了吗?(先把原来的空间delete掉)

 

2 栈、堆、内存管理:

函数本身会形成一个stack来存放接收的参数、返回地址及local object

local object:也叫auto object,auto:自动清理

static object:直到整个程序结束才结束

 

函数名可以有空格吗?可以,如下operator new是一个函数名,带空格:

 

static_cast类型转换,看后面会不会扩开说

malloc到底得到了多大的内存?(左2个是complex,右2个是字符串)

 

1)得到浅绿色的8个字节;每一行是4个字节,所以绿色上面有4*8 = 32个灰色字节,下面4个灰色字节,灰色是调试模式下的;再加上2个砖色的4个字节,这个叫cookie;深绿色填充成64了,要成为16的倍数,原因?因为16的倍数,最后的4位都是0,可以和下面的“给”、“收”结合使用。

为什么8变成了64?为了用于回收空间。

cookie的作用:记录整块给你的大小,否则系统不知道回收多大。64的16进制是40,而1表示“给”空间,0表示“收”空间。

2)非调试模式,只需要加cookie就行了。

数组的情况分析:

 

 数组情况:用整数记录数组长度,所以多了一个4,其它的都差不多。

posted @   妖山鬼店  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示