• 上课班制:

    随到随学

  • 授课时间:

    滚动轮班

  • 授课对象:

    C++学员

  • 网报价格:电询    课程原价:电询
  • 咨询热线:400-998-6158
  • 授课地址:多个校区,电联加微信
  • 课程详情

  • 机构简介
  • 地图信息
  • 预约试听
C++国际软件工程师课程
一阶段:2048、扫雷、贪吃蛇游戏项目贯穿
内容管理、文件操作、PL/SQL编程、数据结构、排序算法、查找算法
第二阶段:ATM、简易聊天室字符版项目贯穿
动态库静态库、内存管理、文件操作、进程管理、进程间通信、网络编程、多线程编程
第三阶段 学生管理系统、飞机大战、简易聊天室界面版项目贯穿
C++语言编程、运算符重载、继承、多态、I/O流、异常处理、QT界面开发、SQlite数据库、QT多线程编程、QT网络编程
第四阶段 小球弹幕屏保项目贯穿
模板和STL、MySQL数据库开发、C语言链接Mysql、Win32API开发、Windows下线程同步技术
第五阶段 文档查看器项目贯穿
MFC框架开发、Windows下数据库开发、Windows下网络开发、Go语言编程、区块链结构开发
同时贯穿五个阶段:

HTTP服务器开发、WEB CRAWLER、DMS数据挖掘系统、远程监控项目、实现数字货币的、块链式结构

知识延伸

std::shared_ptr智能指针是c++11一个相当重要的特性,可以极大地将开发者从资源申请/释放的繁重劳动中解放出来,然而直到c++17前std::shared_ptr都有一个严重的限制,那就是它并不支持动态数组:

#include <memory>

std::shared_ptr<int[]> sp1(new int[10]()); // 错误,c++17前不能传递数组类型作为shared_ptr的模板参数

std::unique_ptr<int[]> up1(new int[10]()); // ok, unique_ptr对此做了特化

std::shared_ptr<int> sp2(new int[10]()); // 错误,可以编译,但会产生未定义行为,请不要这么做

sp1错误的原因很明显,然而sp2的就没有那么好找了,究其原因,是因为std::shared_ptr对非数组类型都使用delete p释放资源,显然这对于new int[10]来说是不对的,对它应该使用delete [] p。

其实c++17前的解决方案并不复杂,我们可以借助std::default_delete,它用于提供对应类型的正确的delete操作:

std::shared_ptr<int> sp3(new int[10](), std::default_delete<int[]>());

现在我们提供了正确的delete操作,可以放心地使用了。

这么做的缺点也是很明显的:

我们想管理的值是int[]类型的,然而事实上传给模板参数的是int

需要显示提供delete functor

不能使用std::make_shared,无法增加异常安全

c++17前shared_ptr未提供opreator[],所以当需要类似操作时不得不使用sp3.get()[index]的形式

事实上共享一片连续分配内存的需求是极为常见的,所以为了修正上述缺陷,c++17以及即将推出的c++2a对std::shared_ptr做了完善。

先说c++17的改进,shared_ptr增加了opreator[],并可以使用int[]类的数组类型做模板参数,所以sp3的定义可以简化了:

std::shared_ptr<int[]> sp3(new int[10]());

对于访问分配的空间,可以将sp3.get()[index]替换为sp3[index]。看个具体的例子:

#include <iostream>

#include <memory>

int main()

更多培训课程,学习资讯,课程优惠等学校信息,请进入 长沙达内教育长沙java培训长沙PHP培训长沙嵌入式培训 网站详细了解,免费咨询电话:400-998-6158

预约试听
  • 姓名: *
  • 性别:
  • 手机号码: *
  • QQ:
  • 微信:
  • 其它说明:
  • 验证码: *  看不清,请点击刷新
相关课程