运算符重载,迭代器和内存自主管理机制(内存池)

1.基础运算符的重载机制

不能重载的运算符:.   ::  ?:    sizeof

运算符重载规则:

1.不能改变运算符的优先级和结合性

2.不能改变运算符的用法

3.不能创造新的运算符

4.不允许有函数默认值

2.迭代器

int main()

{

std::string str1("hello");

std::string::iterator it =str1.begin();

while(it!=str1.end())

{

std::cout<<*it;

it++;

}

std::cout<<std::endl;

}

优点:

1.避免了暴漏容器内部的可能

2.提供了统一容器的遍历方式

3.内存池:自主的内存管理机制

operator new

operator delete

new:

1.开辟内存 operator new函数

2.调用构造函数   系统

delete:

1.调用构造函数

2.释放内存 operator delete函数

允许operator new和operator delete 函数进行重载

频繁的new 和delete?

1.效率低  2.内存碎片(外碎片)

内存池:未被分配出去的节点

1.大内存不容易产生碎片(解决2)

2.应用程序端不用过内核(解决1)

int  *p1=new int;//把数据域分配出去

int *p2=new int;

int *p3=new int;

delete p2;

int *p4=new int;//给p4分配原本p2的内存

用链表不用数组的原因:

地址能代表唯一的内存地址,右边是指针域,而不是游标域。如果内存池扩容,会有第二个组的1,2,3...,下标不能代表唯一内存块。

猜你喜欢

转载自blog.csdn.net/m0_43407388/article/details/107663124