【重学C++】03 | 手撸C++智能指针实战教程
【资料图】
大家好,今天是【重学C++】的第三讲,书接上回,第二讲《02 脱离指针陷阱:深入浅出 C++ 智能指针》介绍了C++智能指针的一些使用方法和基本原理。今天,我们自己动手,从0到1实现一下自己的unique_ptr
和shared_ptr
。
智能指针的基本原理是基于RAII设计理论,自动回收内存资源,从根本上避免内存泄漏。在第一讲《01 C++ 如何进行内存资源管理?》介绍RAII的时候,就已经给了一个用于封装int
类型指针,实现自动回收资源的代码实例:
class AutoIntPtr {public: AutoIntPtr(int* p = nullptr) : ptr(p) {} ~AutoIntPtr() { delete ptr; } int& operator*() const { return *ptr; } int* operator->() const { return ptr; }private: int* ptr;};
我们从这个示例出发,一步步完善我们自己的智能指针。
模版化这个类有个明显的问题:只能适用于int类指针。所以我们第一步要做的,就是把它改造成一个类模版,让这个类适用于任何类型的指针资源。code show time
template class smart_ptr {public:explicit smart_ptr(T* ptr = nullptr): ptr_(ptr) {}~smart_ptr() {delete ptr_;}T& operator*() const { return *ptr_; }T* operator->() const { return ptr_; }private:T* ptr_;}
我给我们的智能指针类用了一个更抽象,更切合的类名:smart_ptr
。
和AutoIntPtr
相比,我们把smart_ptr
设计成一个类模版,原来代码中的int
改成模版参数T
,非常简单。使用时也只要把AutoIntPtr(new int(9))
改成smart_ptr
即可。
另外,有一点值得注意,smart_ptr
的构造函数使用了explicit
, explicit
关键字主要用于防止隐式的类型转换。代码中,如果原生指针隐式地转换为智能指针类型可能会导致一些潜在的问题。至于会有什么问题,你那聪明的小脑瓜看完下面的代码肯定能理解了:
void foo(smart_ptr int_ptr) { // ...}int main() { int* raw_ptr = new int(42); foo(raw_ptr); // 隐式转换为 smart_ptr std::cout << *raw_ptr << std::endl; // error: raw_ptr已经被回收了 // ...}
假设我们没有为smart_ptr
构造函数加上explicit
,原生指针raw_ptr
在传给foo
函数后,会被隐形转换为smart_ptr
, foo
函数调用结束后,栖构入参的smart_ptr
时会把raw_ptr
给回收掉了,所以后续对raw_ptr
的调用都会失败。
当前我们没有为smart_ptr
自定义拷贝构造函数/移动构造函数,C++会为smart_ptr
生成默认的拷贝/移动构造函数。默认的拷贝/移动构造函数逻辑很简单:把每个成员变量拷贝/移动到目标对象中。
按当前smart_ptr
的实现,我们假设有以下代码:
smart_ptr ptr1{new int(10)};smart_ptr ptr2 = ptr1;
这段代码在编译时不会出错,问题在运行时才会暴露出来:第二行将ptr1
管理的指针复制给了ptr2
,所以会重复释放内存,导致程序奔溃。
为了避免同一块内存被重复释放。解决办法也很简单:
独占资源所有权,每时每刻一个内存对象(资源)只能有一个smart_ptr
占有它。一个内存对象(资源)只有在最后一个拥有它的smart_ptr
析构时才会进行资源回收。独占所有权 - unique_smart_ptr独占资源的所有权,并不是指禁用掉smart_ptr
的拷贝/移动函数(当然这也是一种简单的避免重复释放内存的方法)。而是smart_ptr
在拷贝时,代表资源对象的指针不是复制到另外一个smart_ptr
,而是"移动"到新smart_ptr
。移动后,原来的smart_ptr.ptr_
== nullptr, 这样就完成了资源所有权的转移。这也是C++ unique_ptr
的基本行为。我们在这里先把它命名为unique_smart_ptr
,代码完整实现如下:
template class unique_smart_ptr {public:explicit unique_smart_ptr(T* ptr = nullptr): ptr_(ptr) {}~unique_smart_ptr() {delete ptr_;}// 1. 自定义移动构造函数unique_smart_ptr(unique_smart_ptr&& other) {// 1.1 把other.ptr_ 赋值到this->ptr_ptr_ = other.ptr_;// 1.2 把other.ptr_指为nullptr,other不再拥有资源指针other.ptr_ = nullptr;}// 2. 自定义赋值行为unique_smart_ptr& operator = (unique_smart_ptr rhs) {// 2.1 交换rhs.ptr_和this->ptr_std::swap(rhs.ptr_, this->ptr_);return *this;}T& operator*() const { return *ptr_; }T* operator->() const { return ptr_; }private:T* ptr_;};
自定义移动构造函数。在移动构造函数中,我们先是接管了other.ptr_
指向的资源对象,然后把other
的ptr_
置为nullptr,这样在other
析构时就不会错误释放资源内存。
同时,根据C++的规则,手动提供移动构造函数后,就会自动禁用拷贝构造函数。也就是我们能得到以下效果:
unique_smart_ptr ptr1{new int(10)};unique_smart_ptr ptr2 = ptr1; // errorunique_smart_ptr ptr3 = std::move(ptr1); // okunique_smart_ptr ptr4{ptr1} // errorunique_smart_ptr ptr5{std::move(ptr1)} // ok
自定义赋值函数。在赋值函数中,我们使用std::swap
交换了 rhs.ptr_
和this->ptr_
,注意,这里不能简单的将rhs.ptr_
设置为nullptr,因为this->ptr_
可能有指向一个堆对象,该对象需要转给rhs
,在赋值函数调用结束,rhs
析构时顺便释放掉。避免内存泄漏。
注意赋值函数的入参rhs
的类型是unique_smart_ptr
而不是unique_smart_ptr&&
,这样创建rhs
使用移动构造函数还是拷贝构造函数完全取决于unique_smart_ptr
的定义。因为unique_smart_ptr
当前只保留了移动构造函数,所以rhs
是通过移动构造函数创建的。
学过第二讲的shared_ptr
, 我们知道它是利用计数引用的方式,实现了多个智能指针共享同一个对象。当最后一个持有对象的智能指针析构时,计数器减为0,这个时候才会回收资源对象。
我们先给出shared_smart_ptr
的类定义
template class shared_smart_ptr {public:// 构造函数explicit shared_smart_ptr(T* ptr = nullptr)// 析构函数~shared_smart_ptr()// 移动构造函数shared_smart_ptr(shared_smart_ptr&& other)// 拷贝构造函数shared_smart_ptr(const shared_smart_ptr& other)// 赋值函数shared_smart_ptr& operator = (shared_smart_ptr rhs)// 返回当前引用次数int use_count() const { return *count_; }T& operator*() const { return *ptr_; }T* operator->() const { return ptr_; }private:T* ptr_;int* count_;}
暂时不考虑多线程并发安全的问题,我们简单在堆上创建一个int类型的计数器count_
。下面详细展开各个函数的实现。
构造函数为了避免对
count_
的重复删除,我们保持:只有当ptr_ != nullptr
时,才对count_
进行赋值。
同样的,使用explicit
避免隐式转换。除了赋值ptr_
, 还需要在堆上创建一个计数器。
explicit shared_smart_ptr(T* ptr = nullptr){ptr_ = ptr;if (ptr_) {count_ = new int(1);}}
析构函数在析构函数中,需要根据计数器的引用数判断是否需要回收对象。
~shared_smart_ptr() {// ptr_为nullptr,不需要做任何处理if (ptr_) {return;}// 计数器减一--(*count_);// 计数器减为0,回收对象if (*count_ == 0) {delete ptr_;delete count_;return;}}
移动构造函数添加对count_
的处理
shared_smart_ptr(shared_smart_ptr&& other) {ptr_ = other.ptr_;count_ = other.count_;other.ptr_ = nullptr;other.count_ = nullptr;}
赋值构造函数添加交换count_
shared_smart_ptr& operator = (shared_smart_ptr rhs) {std::swap(rhs.ptr_, this->ptr_);std::swap(rhs.count_, this->count_);return *this;}
拷贝构造函数对于shared_smart_ptr
,我们需要手动支持拷贝构造函数。主要处理逻辑是赋值ptr_
和增加计数器的引用数。
shared_smart_ptr(const shared_smart_ptr& other) {ptr_ = other.ptr_;count_ = other.count_;if (ptr_) {(*count_)++;}}
这样,我们就实现了一个自己的共享智能指针,贴一下完整代码
template class shared_smart_ptr {public:explicit shared_smart_ptr(T* ptr = nullptr){ptr_ = ptr;if (ptr_) {count_ = new int(1);}}~shared_smart_ptr() {// ptr_为nullptr,不需要做任何处理if (ptr_ == nullptr) {return;}// 计数器减一--(*count_);// 计数器减为0,回收对象if (*count_ == 0) {delete ptr_;delete count_;}}shared_smart_ptr(shared_smart_ptr&& other) {ptr_ = other.ptr_;count_ = other.count_;other.ptr_ = nullptr;other.count_ = nullptr;}shared_smart_ptr(const shared_smart_ptr& other) {ptr_ = other.ptr_;count_ = other.count_;if (ptr_) {(*count_)++;}}shared_smart_ptr& operator = (shared_smart_ptr rhs) {std::swap(rhs.ptr_, this->ptr_);std::swap(rhs.count_, this->count_);return *this;}int use_count() const { return *count_; };T& operator*() const { return *ptr_; };T* operator->() const { return ptr_; };private:T* ptr_;int* count_;};
使用下面代码进行验证:
int main(int argc, const char** argv) {shared_smart_ptr ptr1(new int(1));std::cout << "[初始化ptr1] use count of ptr1: " << ptr1.use_count() << std::endl;{// 赋值使用拷贝构造函数shared_smart_ptr ptr2 = ptr1;std::cout << "[使用拷贝构造函数将ptr1赋值给ptr2] use count of ptr1: " << ptr1.use_count() << std::endl;// 赋值使用移动构造函数shared_smart_ptr ptr3 = std::move(ptr2);std::cout << "[使用移动构造函数将ptr2赋值给ptr3] use count of ptr1: " << ptr1.use_count() << std::endl;}std::cout << "[ptr2和ptr3析构后] use count of ptr1: " << ptr1.use_count() << std::endl;}
运行结果:
[初始化ptr1] use count of ptr1: 1[使用拷贝构造函数将ptr1赋值给ptr2] use count of ptr1: 2[使用移动构造函数将ptr2赋值给ptr3] use count of ptr1: 2[ptr2和ptr3析构后] use count of ptr1: 1
总结这一讲我们从AutoIntPtr
出发,先是将类进行模版化,使其能够管理任何类型的指针对象,并给该类起了一个更抽象、更贴切的名称——smart_ptr
。
接着围绕着「如何正确释放资源对象指针」的问题,一步步手撸了两个智能指针 ——unique_smart_ptr
和shared_smart_ptr
。相信大家现在对智能指针有一个较为深入的理解了。
X 关闭
推荐内容
- 当前要闻:【重学C++】03 | 手撸C++智能指针实战教程
- 鞍重股份:生产及销售成本为公司商业机密,可公布的数据将在定期报告中披露
- 世界视点!山东中外合作办学大学有哪些学校(2023年山东中外合作办学有哪些院校)
- 当妈后这样搞钱,才能越来越值钱 世界今头条
- 当前观点:森萱医药:5月19日融资买入1.18万元,融资融券余额225.61万元
- 世界热讯:腾势D9劲敌来了?32.98万起售!广汽传祺E9正式上市
- 每日视点!JDG.Kanavi赛后更博:我们是冠军
- 新鲜辣椒如何腌制保存 腌辣椒怎么保存
- 一个女字旁一个青念什么_一个女一个青念什么
- 湘潭博纳高级中学2023年秋季开学启动仪式举行
- 当前热文:骁龙 8 Gen 2 for Galaxy 处理器独占期结束,一加 Ace2 Pro 等机有望搭载
- 新动态:海尔智家(06690.HK):已累计回购435万股A股
- 热讯:万科A(000002.SZ):向特定对象发行股票申请获得深交所受理
- 全球观速讯丨三连冠!中国队击败韩国队捧得苏迪曼杯
- 全球观天下!汤姆猫:公司海外子公司已接入GPT-4官方接口 并借助GPT-4模型进行相关产品测试、研发工作
- 我国深海考古有重大发现!
- 世界聚焦:国际金价一路飙升,谁淘到了“真金”?
- 暴雨蓝色预警!今日南方降雨进入最强时段
- 李诣凡拍的灵异照片_李诣凡
- 《色彩分析仪测评方法》团体标准正式发布 开创精密检测崭新未来|全球快播-热头条
- 最近外出,当心它!水肿、发炎、严重会感染! 世界焦点
- 暴雨蓝色预警:江西东北部、浙江西南部、福建西部等地局地有大暴雨 天天热闻
- 鸠摩罗什怎么读_鸠摩罗什的简介
- 书怎么摆放才能保存长久 书怎么摆放才能长久保存-环球短讯
- “你好,沈阳”在沈外籍人士足球友谊赛启幕
- 岚图追光深圳区域上市,打造中式现代豪华电动出行体验 百事通
- 苏州工业园区在哪个区域_苏州工业园区在哪个区
- 小学家长意见怎么写50字_小学家长意见怎么写|每日热闻
- 真正的赛车手游来了!《巅峰极速》公测定档6月20日 世界聚焦
- 全球看点:欧冠决赛两队各分配门票仅19926张,球迷不满门票分配和定价
- 世界快报:漂亮的思维导图模板一等奖 漂亮的思维导图模板
- 中高考当天,家长需要“全程陪考”吗?明智的家长巧妙应对_当前观点
- 岳阳市安全生产行政执法工作月讲评会在汨罗召开
- Java版1.20-pre3|每日快报
- 天天热议:捷信超贷逾期28年会上征信系统吗
- 当前信息:比亚迪销售及服务系统官网_比亚迪销售及服务系统入口
- 我的世界字体加粗_我的世界字体_全球速读
- 掌控力:让所有人对你讲真话-环球快报
- 全球观速讯丨罗技驱动一直显示正在初始化
- 焦点速讯:五月天演唱会“黄牛票”价格狂跌,粉丝胜了?
- 世界热推荐:dnf奶妈输出刷图加点_DNF奶妈刷图加点攻略
- 环球记者连线主持人(环球记者连线)
- 如何清洁金属庭院栏杆_世界快播
- 5月19日基金净值:金信稳健策略灵活配置混合最新净值1.6562,涨0.61%
- 马钢股份:5月19日召开董事会会议_世界微资讯
- 家庭美食15元无限续,开胃!
- 每日简讯:毒性极大!见到请立即报警,快来看看
- 50条生理常识,比黄金还值钱!_环球热点评
- 第25届曹禺戏剧文学奖揭晓 话剧《深海》等5部作品获奖
- 《平凡之路》大结局:4人圆满,3人付出代价,留下2个遗憾! 环球新要闻
- 自建房也有身份证!民勤县扎实开展经营性自建房动态化管理-资讯
- 5月20日婚姻登记预约火爆!奉贤民政:根据情况适时延迟服务
- dnf打字怎么出现_dnf打字出去不显示原因
- 恒光股份:业绩说明会定于2023年5月25日举行|天天头条
- 今日精选:裳的组词_裳怎么组词
- 奥森北园东门外千米花墙宛若瀑布真美呀 赏蔷薇瀑布注意来往车辆-当前快看
- 若刘备绝对听从诸葛亮的话,可否实现《隆中对》里说的汉室复兴?
- 天天看热讯:鸡蛋枸杞黑芝麻大枣怎么蒸?
- 每日速讯:2亿像素写真相机加持!荣耀90/Pro系列手机开启预约
- 【世界时快讯】2023第三届中国·东光塑料机械博览会河北东光县开幕
- 保安全!北京新改扩道路,路口等处将避免种这类树|天天新视野
- 上市银行息差收窄营收放缓 如何创造价值穿越周期
- 中江县检察院抓实“选拔+培育+发掘”机制 因人施策加强青年干警队伍建设
- 法医警官33年交情 萧开平谈侯友宜小故事
- 五月去内蒙古旅游_去内蒙古旅游需要带什么东西
- 卧床不起老人忘记银行卡密码,重置被三轮拉到场,银行还有服务吗
- 和平精英五指键位最佳布局_和平精英五指键位
- 隔音窗哪个品牌好 隔音窗价格多少钱一平
- 环球信息:斩断网络诈骗的罪恶链条
- 全球最新:香港金管局启动“数码港元”先导计划
- 张柏芝晒娃闹乌龙,引起网友争议,她的口碑怎么到了这步田地? 全球球精选
- 怀远烧饼里脊|焦点关注
- 纽约金价18日下跌|环球速递
- 天天速递!从“智易行难”到“智行合一”
- 每日快看:罗德里格·迪亚斯·达·科斯塔·阿历克斯_关于罗德里格·迪亚斯·达·科斯塔·阿历克斯介绍
- 养鸽子的成本和利润和销路(养鸽子的成本和利润)
- 年轻人的最新时尚玩物 Vidda C1 Air小身材蕴藏三色激光大能量|全球独家
- 今热点:不必过度关注股市成交量
- 哈利波特电影上映时间_哈利波特电影上映时间介绍
- 左下腹部隐隐作痛怎么回事男性_牙补完后总是隐隐作痛是怎么回事
- 每日热讯!玉玲珑时尚餐厅团购_玉玲珑时尚餐厅
- 1300余户居民喜迁新居!青岛这里近年最大棚改社区回迁
- 自制热气球原理_热气球原理
- 快资讯丨探秘上海自来水科技馆,了解自来水的诞生
- 用合成肽诊断炎症性疾病
- 2023年安徽宿州中考成绩查询网站:https://jiaotiju.ahsz.gov.cn/
- 一元硬币哪年的最值钱_一元硬币哪年份最值钱
- 当前看点!《王国之泪》中盖侬的新造型灵感来自黄昏公主
- 5月18日国内环己酮市场行情持续偏弱_当前快看
- 热资讯!“股神”巴菲特赚麻了!日本股指创33年新高,机构称牛市或才刚开始
- 打牌收集25位伴侣!《幻想曹操传2》7月首发Steam! 世界速看
- H&H国际控股(01112)附属拟获授5亿元为期30个月的贷款融资-环球聚看点
- 环球观点:什么是童子鸡_童子鸡是什么意思
- 撞坏东西赔2300元 受损方事后却要退还 焦点报道
- Twitter 活跃用户月均发帖量下滑约 25%
- 李白关于月亮的诗有几首_李白关于月亮的诗_热消息
- 每日热门:致5人死亡 坠车浮桥承建方:出车祸不能怪修路的
- 佰维存储:5月17日融资买入5749.43万元,融资融券余额3.17亿元
- 因“飞线”充电等问题突出 瀍河区两个小区被曝光
- 生菜嘌呤含量高吗 生菜的嘌呤含量是多少呢_全球报道
精彩推荐
-
当前要闻:【重学C++】03 | 手撸C++智能指针实战教程2023-05-22
-
鞍重股份:生产及销售成本为公司商业机密,可公布的数据将在定期报告中披露2023-05-22
-
世界视点!山东中外合作办学大学有哪些学校(2023年山东中外合作办学有哪些院校)2023-05-22
-
当妈后这样搞钱,才能越来越值钱 世界今头条2023-05-22
-
当前观点:森萱医药:5月19日融资买入1.18万元,融资融券余额225.61万元2023-05-22
-
世界热讯:腾势D9劲敌来了?32.98万起售!广汽传祺E9正式上市2023-05-22
-
每日视点!JDG.Kanavi赛后更博:我们是冠军2023-05-22
-
新鲜辣椒如何腌制保存 腌辣椒怎么保存2023-05-22
-
一个女字旁一个青念什么_一个女一个青念什么2023-05-22
-
湘潭博纳高级中学2023年秋季开学启动仪式举行2023-05-21
-
新动态:海尔智家(06690.HK):已累计回购435万股A股2023-05-21
-
热讯:万科A(000002.SZ):向特定对象发行股票申请获得深交所受理2023-05-21
-
全球观速讯丨三连冠!中国队击败韩国队捧得苏迪曼杯2023-05-21
-
我国深海考古有重大发现!2023-05-21
-
世界聚焦:国际金价一路飙升,谁淘到了“真金”?2023-05-21
-
暴雨蓝色预警!今日南方降雨进入最强时段2023-05-21
-
李诣凡拍的灵异照片_李诣凡2023-05-21
-
《色彩分析仪测评方法》团体标准正式发布 开创精密检测崭新未来|全球快播-热头条2023-05-21
-
最近外出,当心它!水肿、发炎、严重会感染! 世界焦点2023-05-21
-
暴雨蓝色预警:江西东北部、浙江西南部、福建西部等地局地有大暴雨 天天热闻2023-05-21
-
鸠摩罗什怎么读_鸠摩罗什的简介2023-05-21
-
书怎么摆放才能保存长久 书怎么摆放才能长久保存-环球短讯2023-05-21
-
“你好,沈阳”在沈外籍人士足球友谊赛启幕2023-05-21
-
岚图追光深圳区域上市,打造中式现代豪华电动出行体验 百事通2023-05-21
-
苏州工业园区在哪个区域_苏州工业园区在哪个区2023-05-21
-
小学家长意见怎么写50字_小学家长意见怎么写|每日热闻2023-05-20
-
真正的赛车手游来了!《巅峰极速》公测定档6月20日 世界聚焦2023-05-20
-
全球看点:欧冠决赛两队各分配门票仅19926张,球迷不满门票分配和定价2023-05-20
-
世界快报:漂亮的思维导图模板一等奖 漂亮的思维导图模板2023-05-20
-
中高考当天,家长需要“全程陪考”吗?明智的家长巧妙应对_当前观点2023-05-20
-
岳阳市安全生产行政执法工作月讲评会在汨罗召开2023-05-20
-
Java版1.20-pre3|每日快报2023-05-20
-
天天热议:捷信超贷逾期28年会上征信系统吗2023-05-20
-
当前信息:比亚迪销售及服务系统官网_比亚迪销售及服务系统入口2023-05-20
-
我的世界字体加粗_我的世界字体_全球速读2023-05-20
-
掌控力:让所有人对你讲真话-环球快报2023-05-20
-
全球观速讯丨罗技驱动一直显示正在初始化2023-05-20
-
焦点速讯:五月天演唱会“黄牛票”价格狂跌,粉丝胜了?2023-05-20
-
世界热推荐:dnf奶妈输出刷图加点_DNF奶妈刷图加点攻略2023-05-20
-
环球记者连线主持人(环球记者连线)2023-05-20
-
如何清洁金属庭院栏杆_世界快播2023-05-20
-
5月19日基金净值:金信稳健策略灵活配置混合最新净值1.6562,涨0.61%2023-05-20
-
马钢股份:5月19日召开董事会会议_世界微资讯2023-05-20
-
家庭美食15元无限续,开胃!2023-05-20
-
每日简讯:毒性极大!见到请立即报警,快来看看2023-05-19
-
50条生理常识,比黄金还值钱!_环球热点评2023-05-19
-
第25届曹禺戏剧文学奖揭晓 话剧《深海》等5部作品获奖2023-05-19
-
《平凡之路》大结局:4人圆满,3人付出代价,留下2个遗憾! 环球新要闻2023-05-19
-
自建房也有身份证!民勤县扎实开展经营性自建房动态化管理-资讯2023-05-19
-
5月20日婚姻登记预约火爆!奉贤民政:根据情况适时延迟服务2023-05-19
-
dnf打字怎么出现_dnf打字出去不显示原因2023-05-19
-
恒光股份:业绩说明会定于2023年5月25日举行|天天头条2023-05-19
-
今日精选:裳的组词_裳怎么组词2023-05-19
-
奥森北园东门外千米花墙宛若瀑布真美呀 赏蔷薇瀑布注意来往车辆-当前快看2023-05-19
-
若刘备绝对听从诸葛亮的话,可否实现《隆中对》里说的汉室复兴?2023-05-19
-
天天看热讯:鸡蛋枸杞黑芝麻大枣怎么蒸?2023-05-19
-
每日速讯:2亿像素写真相机加持!荣耀90/Pro系列手机开启预约2023-05-19
-
【世界时快讯】2023第三届中国·东光塑料机械博览会河北东光县开幕2023-05-19
-
保安全!北京新改扩道路,路口等处将避免种这类树|天天新视野2023-05-19
-
上市银行息差收窄营收放缓 如何创造价值穿越周期2023-05-19
-
中江县检察院抓实“选拔+培育+发掘”机制 因人施策加强青年干警队伍建设2023-05-19
-
法医警官33年交情 萧开平谈侯友宜小故事2023-05-19
-
五月去内蒙古旅游_去内蒙古旅游需要带什么东西2023-05-19
-
卧床不起老人忘记银行卡密码,重置被三轮拉到场,银行还有服务吗2023-05-19
-
和平精英五指键位最佳布局_和平精英五指键位2023-05-19
-
隔音窗哪个品牌好 隔音窗价格多少钱一平2023-05-19
-
环球信息:斩断网络诈骗的罪恶链条2023-05-19
-
全球最新:香港金管局启动“数码港元”先导计划2023-05-19
-
张柏芝晒娃闹乌龙,引起网友争议,她的口碑怎么到了这步田地? 全球球精选2023-05-19
-
怀远烧饼里脊|焦点关注2023-05-19
-
纽约金价18日下跌|环球速递2023-05-19
-
天天速递!从“智易行难”到“智行合一”2023-05-19
-
养鸽子的成本和利润和销路(养鸽子的成本和利润)2023-05-18
-
年轻人的最新时尚玩物 Vidda C1 Air小身材蕴藏三色激光大能量|全球独家2023-05-18
-
今热点:不必过度关注股市成交量2023-05-18
-
哈利波特电影上映时间_哈利波特电影上映时间介绍2023-05-18
-
左下腹部隐隐作痛怎么回事男性_牙补完后总是隐隐作痛是怎么回事2023-05-18
-
每日热讯!玉玲珑时尚餐厅团购_玉玲珑时尚餐厅2023-05-18
-
1300余户居民喜迁新居!青岛这里近年最大棚改社区回迁2023-05-18
-
自制热气球原理_热气球原理2023-05-18
-
快资讯丨探秘上海自来水科技馆,了解自来水的诞生2023-05-18
-
用合成肽诊断炎症性疾病2023-05-18
-
一元硬币哪年的最值钱_一元硬币哪年份最值钱2023-05-18
-
当前看点!《王国之泪》中盖侬的新造型灵感来自黄昏公主2023-05-18
-
5月18日国内环己酮市场行情持续偏弱_当前快看2023-05-18
-
热资讯!“股神”巴菲特赚麻了!日本股指创33年新高,机构称牛市或才刚开始2023-05-18
-
打牌收集25位伴侣!《幻想曹操传2》7月首发Steam! 世界速看2023-05-18
-
H&H国际控股(01112)附属拟获授5亿元为期30个月的贷款融资-环球聚看点2023-05-18
-
环球观点:什么是童子鸡_童子鸡是什么意思2023-05-18
-
撞坏东西赔2300元 受损方事后却要退还 焦点报道2023-05-18
-
Twitter 活跃用户月均发帖量下滑约 25%2023-05-18
-
李白关于月亮的诗有几首_李白关于月亮的诗_热消息2023-05-18
-
每日热门:致5人死亡 坠车浮桥承建方:出车祸不能怪修路的2023-05-18
-
佰维存储:5月17日融资买入5749.43万元,融资融券余额3.17亿元2023-05-18
-
因“飞线”充电等问题突出 瀍河区两个小区被曝光2023-05-18
-
生菜嘌呤含量高吗 生菜的嘌呤含量是多少呢_全球报道2023-05-18