#指示 一次
#包含<串>
#包含<双队>
构 连接{
串 标识;
};
元<整 N>类 对象池 终:不可复制{//@2,编译期提示错误
//@10,加个终,表示不可继承.
//不可复制,删除默认构造,拷贝构造,禁用(移动,移动赋值)
对象池(大小型 初化大小){//未限制初化大小.
静断(N<500,"初化大小不能大于500");
对(大小型 i=0;i<初化大小;i++){
池.压后(新 连接());
}
}//用运行时来判断不好,不如编译时
公:
静 对象池&取(){//返回&,这样更安全.
静 对象池<N>p;中 p;
}//@11,全局唯一.
/*~对象池(){
对(双队<连接*>::步 它=池.开始();它!=池.尾();它++){
连接*p=*它;
删 p;
}//@4,析构函数无用了
}*/
//可以根据共针,知道外面的链接是否释放.
用 删型=函数<空(连接*)>;
独针<连接,删型>获取(){
独锁<互斥锁>l;//@8,加个锁.
//一种是`域警卫`,一种是`独警卫`.
如(空的()){中 无效;}
独针<连接,删型>针(池.前().释放(),
[本](连接*t){//构建的时候,只要你删了该针,
池.压后(独针(连接)t);
});//获取的时候,就准备好了释放了
池.弹前();中 针;
}//@6共针->独针了.//该针就被放进池里面了
/*
空 释放(连接*p){//需要手动释放,不安全
如(p==空针)p=造共<连接>();//@1,加
池.压后(p);
}//未检查连接参数,删了,变成空指针,则下次出错
//现在野指针又来了,
//外部删了`指针`//@5整个释放都不要了
*/
极 空的()常{
中 池.空的();
}
大小型 大小()常{
中 池.大小();
}
私:
双队<独针<连接>>池;//@3,*->共针.
};
//内存安全,就是对象生命期的问题,裸指针不安全(手动释放,无法可靠的检查指针是否释放)
//三种指针:共针,独针,弱针(用来监视共针的生命期,检查指针是否释放)
//@7线程安全,加个锁.
//@9,不可拷贝,复制,移动,不可继承.
//c++安全设施:常,盖,无异,严格序表达式求值,数组,变量,安全的stl算法....
09-10
1281
博客
2409js,学习js2
09-21
427
博客
2409js,学习js1
09-20
403
09-20
56
09-20
49
09-18
135
09-16
193
博客
2409wtl,网浏包装
09-08
693
09-08
1027
博客
2409wtl,切换视图
09-07
779
09-07
1022
09-07
342
09-06
866
09-06
927
09-06
261
09-05
229
09-05
352
09-05
321
09-05
425
09-04
1217