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...,下标不能代表唯一内存块。