- 博客(13)
- 收藏
- 关注
原创 String类的写时拷贝
1、Copy-On-Write的工作原理是什么?答:是引用计数2、String类在什么情况下才共享内存?答:这意思就是你用我的,才会出现共享。在使用别的类的数据时,只有两种情况,第一种就是以别的类构造自己,这个会触发拷贝构造函数;第二种就是以别的类赋值,这个会触发赋值运算符的重载。注意:不要看见“=”就以为是赋值,人家可能是调用了拷贝构造,尤其是前面带了类名的。还有要注意不要看见后
2017-10-27 22:20:20 431
原创 剖析new/delete、new[]/delete[]到底做了些什么事情
要知道new/delete和new[]/delete[],首先要知道operator new和operator delete,他们都是C++中的库函数。void * operator new(size_t);void * operator delete(void*);给一句:Class *pA = new A(10);new做的工作是:1、调用operator new标
2017-10-26 11:04:17 320
原创 new/delete和malloc/free的关系与区别
new/deletemalloc/free是运算符(只能重载,不能定义)库函数(名字随便起)能调用构造函数和析构函数只能申请内存空间抛异常不抛异常,会返回NULL分配内存设计,分配算法,查找,避免内存碎片,导致效率太低,因此程序员喜欢自己写new/delete,或者创建一
2017-10-26 11:03:42 585
原创 深拷贝和浅拷贝的区别
深浅拷贝的区别: 浅拷贝是将原始对象中的数据型字段拷贝到新对象中去,将引用型字段的“引用”复制到新对象中去,不把“引用的对象”复制进去,所以原始对象和新对象引用同一对象,新对象中的引用型字段发生变化会导致原始对象中的对应字段也发生变化。 深拷贝是在引用方面不同,深拷贝就是创建一个新的和原始字段的内容相同的字段,是两个一样大的数据段,所以两者的引用是不同的,之后的新对象中的引用型
2017-10-24 21:27:45 29578 1
原创 拷贝构造和赋值运算符函数的重载
1、C++对传参和传返回值时构造的优化处理 当拷贝构造存在连续的赋值情况的时候, 当多个临时对象连续赋值的时候 简单点来说就是,再一次拷贝构造结束后,并没有直接返回给要创建的对象而是又再次进行了拷贝构造。或者是,建立一个临时对象,来进行拷贝构造,然后又返回了一个临时对象,再用这个返回的临时对象继续拷贝构造。这时候,系统就会自动优化。2. Test1中调用了_
2017-10-23 14:56:48 358
原创 操作符重载
这里是借鉴他人的结论在此学习,拓展,后面会继续修改完善//操作符实现重载的方式有两种,一种是“友元函数”,一种是“类成员函数”//类成员函数只有一个参数,因为类成员函数可以使用this指针获取自身的对象#include using namespace std;class Point{public:int x;int y;Point(int _x, i
2017-10-19 12:25:39 222
原创 拷贝构造函数为什么使用引用类型
#include using namespace std;class Test{int _Test;public:Test(int x) :_Test(x)//带参构造函数{cout }Test(const Test&te)//拷贝构造函数{_Test = te._Test;cout }Test& operator=(const Test
2017-10-19 11:21:12 594
原创 区别无参、带参、拷贝构造函数、赋值函数
#include #include using namespace std;struct Student//在结构体中{string name;int age;Student() //无参构造函数{cout age = -1;name = "Unknown";}Student(string name, int age)//带参构造函数{
2017-10-19 10:17:41 476
原创 对象成员的引用
//1、对象名.成员名//2、指向对象的指针class Time{public:int hour;int minute;};Time t, *p; //定义对象t和指针变量pp = &t; //使p指向对象tcout hour;//输出p指向的对象中的成员hour//3、通过对象的引用来访问Time t1;
2017-10-18 17:27:12 290
原创 类内类外定义成员函数
//1、类外定义成员函数class Student{public:void display();//公用成员函数声明private:int num;char name[20];char sex;};void Student::display()//类外定义display函数,“::”是作用域运算符,在类外要加类名,不然就是全局函数{cout co
2017-10-18 17:26:11 10280
原创 数据和操作的封装
//定义了两个Student类的对象stud1,stud2,这里对象stud1,stud2是占空间的//目前封装在类中的对象stud1和stud2都是对外界隐蔽的,外界不能调用它们,只有本对象中的函数display//才可以引用本对象中的数据,这里就引出“接口”
2017-10-18 17:21:49 438
原创 类和对象、访问限定符、默认成员函数
1、类的定义,访问限定符,面向对象封装性,对象的引用。 (1)每个实体都是对象,对象的类型是类,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。 类是用户建立的类型,如果程序中要用到类类型,必须根据自己的需要进行声明,或者使用别人已设计好的类。 关键字class和类名组成类头,class是声明类时必须使用的关键字,相当于声明结构体类型时
2017-10-17 21:25:11 2222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人