C++学习笔记(二)

类中包含指针时需要自定义拷贝构造函数和拷贝赋值操作,以防止内存问题。拷贝构造和赋值可能涉及动态分配的内存,需注意自我赋值的安全性。栈对象在作用域结束时自动清理,而堆对象需要手动delete以避免内存泄露。new和delete是动态内存分配的关键,new[]对应delete[]。
摘要由CSDN通过智能技术生成

带指针的类(eg. string.h)

只要类带指针一定要自己写拷贝构造函数和拷贝复制函数。 

拷贝构造,拷贝赋值,析构

拷贝构造函数:

string s1();
string s2("hello");

string s3(s1);//拷贝构造
cout<<s3;

拷贝幅值函数:

如果没有检测自我赋值可能会导致结果出错,不仅仅只是效率高低的问题(因为赋值的第一件事是将待赋值指针delete)。

s3 = s2;//拷贝赋值
cout<<s3;

如果做了动态分配,那么结束之前需要调用析构函数释放内存,否则可能会导致内存泄露。

堆、栈与内存管理

栈是存在某作用域的一块内存空间,调用函数,函数本身会形成一个stack用来放置所接受的参数,返回地址,区域对象。

其生命在作用于结束之后结束,会被自动清理。

静态对象生命会知道整个程序结束。 

 全局对象的作用域也是整个程序。

堆是由操作系统提供的全局内存空间。

 需要delete,因为当作用于结束后,对象仍然存在,会产生内存泄露(没机会delete)。

new : 先分配内存(malloc)在调用拷贝构造。

delete : 先调用析构函数,再释放内存(free)。

new char[] 需要搭配 delete[],否则会因为未调用足够次数的析构函数导致内存泄露。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值