PaQiuQiu
作为一个热衷于技术的从业者,我在这里与大家分享最新的科技动态、独到的技术观点和实践经验。
展开
-
C++《i+1》系列文章汇总
根据自己学习C++一路走来的心路历程,以及在工作和学习过程中对C++的不断思考和总结,详细阐述了C++的学习路线图,并以图文并茂的方式来普及C++基础、用好C++标准库,调试过程中的排疑解难,并教会大家不断精进的要点,适合基础进阶和想不断勇攀高峰的C++开发人员!原创 2023-11-25 12:18:07 · 199 阅读 · 0 评论 -
C++Primer第五版——习题答案详解
C++Primer第五版——习题答案+详解(完整版)原创 2016年12月21日 16:11:30标签: C++/ 习题答案/ 大全/ 第五版/ primer/ 30065 C++Primer 第五版习题答案详解 发表评论HTML/XMLobjective-c Delp原创 2017-11-17 17:16:29 · 9919 阅读 · 2 评论 -
如何系统学习C++?
C++ 真的是一门备受争议的语言,关于 C++ 的书籍也是浩瀚如海。那几本 C++ 的四书五经想必大家也早已在各路学习路线中见过了。不过没关系,今天你依然会看见它们的身影哈哈哈。C++ 最大的缺点就是语法复杂,而且难学难精。学习 C 语言也许一本 K&R 的《C程序设计语言》就够了,但是在 C++ 世界里,找不到这样一本书。这是一个爱速成的年代,大多数人很难耐得住寂寞花很长时间去学习一门语言,所以《21天学通C++》的销量还蛮不错的。但是很遗憾,别说 21 天,就是一两年也很难学通 C+转载 2022-01-29 15:24:34 · 2181 阅读 · 0 评论 -
map容器中的新成员
由于std::map中,元素的key是唯一的,我们经常遇到这样的场景,向map中插入元素时,先检测map指定的key是否存在,不存在时才做插入操作,如果存在,直接取出来使用,或者key不存在时,做插入操作,存在时做更新操作。通用的做法,可以直接用emplace操作,判断指定的key是否存在,如果不存在,则插入元素,当元素存在的时候,emplace依然会构造一次带待插入元素,判断不需要插入后,将该元素析构,这样导致的后果是,。鉴于此,C++17引入了,在参数列表中,把key和value。原创 2024-11-11 21:32:09 · 86 阅读 · 0 评论 -
优秀开源工程C++
迷你的C++11 JSON库。C++ JSON 解析器。原创 2024-06-16 21:20:22 · 232 阅读 · 0 评论 -
使用 Windows 调试器查找 GDI 泄漏
本文是有关使用Windows调试器查找和修复GDI句柄泄漏的演练。Windows调试器应该是最后的手段,首先在整个代码库中搜索并检查这两个函数调用之间的 GDI 代码是否有未删除的句柄并将其删除。使用任务管理器,我们可以在“详细信息”选项卡页上添加“GDI 对象”列,以获取每个进程当前打开的 GDI 句柄的数量。一个进程最多可以有 10000 个打开的 GDI 句柄。所有进程的系统范围限制为 65535。右键单击标题以选择要显示的列。选中“GDI 对象”选项以添加到“详细信息”选项卡并关闭对话框。原创 2024-01-08 21:34:13 · 1017 阅读 · 0 评论 -
异常处理与CrashRpt工具——(3)
CrashRpt是一个开源的第三方包,在程序出现未处理异常时,能够收集错误信息,并生成程序错误报告。CrashRpt可以将报告按照指定的方式(例如HTTP或SMTP)发送给开发者或者保存在本地,并且可以对生成的错误报告进行分析,定位错误位置,找出错误原因。原创 2023-12-20 08:09:49 · 133 阅读 · 0 评论 -
异常处理与CrashRpt工具——(2)
一种思想:在所有支持异常处理的编程语言中(例如java),要认识到的一个思想:在异常处理过程中,由问题检测代码可以抛出一个对象给问题处理代码,通过这个对象的类型和内容,实际上完成了两个部分的通信,通信的内容是“出现了什么错误”。例外:catch子句使用指针或者引用接收参数,并且在catch子句内你不访问异常类的成员,那么你的catch子句的异常说明符才可以是前置声明的类型。因为C++中可以抛出任何类型的异常,所以我们的异常类可以不继承标准异常类,但是这样可能会导致程序混乱,尤其是当我们多人协同开发时。原创 2023-12-16 19:46:43 · 121 阅读 · 0 评论 -
异常处理与CrashRpt工具——(1)
除此之外,我们可以为每一个异常设置若干处理函数,而这些处理函数会被放到一个链表中,当异常到达时,这些处理函数会被调用。语句不是这个异常错误所对应的正确异常处理模块,不能处理该异常,通知操作系统继续搜寻该线程其他的异常处理程序(系统将继续到上一层的。复合语句中的受保护执行的代码发生了异常,或受保护执行的代码调用的函数内部发生了异常并要求调用者来处理该异常,这样的语句是catch不到的,直接就会crash了,因为这是内存错误,硬件异常。中的代码,是在正常执行完之后进来的,还是因为全局展开或局部展开而进入的。原创 2023-12-13 19:31:50 · 130 阅读 · 0 评论 -
Windbg常用命令
内建在调试引擎中的命令,提供标准命令没有提供的功能,命令以.开头,比如**.excr、.reload、.dump**等。:用于扩展某一方面的调试功能,实现在动态加载的扩展模块中,以!analyze**等。:基本的调试命令,不区分大小写,比如。原创 2023-11-30 20:54:11 · 332 阅读 · 0 评论 -
判断数组里面的元素是否都为某个数——C++ 算法库(std::all_of)
该函数对整个数组元素进行操作,可以节省运行循环来逐一检查每个元素的时间。它检查每个元素上的给定属性,并在范围内的每个元素满足指定属性时返回 true,否则返回 false。原创 2023-11-28 21:28:39 · 803 阅读 · 0 评论 -
C++ 用ifstream读文件
C++iostreamIOfstreamstringIO每个IO 对象都维护一组条件状态,用来指出此对象上是否可以进行 IO 操作。如果遇到错误——例如输入流遇到了文件末尾,则对象的状态变为是失效,所有的后续输入操作都不能执行,直到错误纠正。ifstreamofstreamfstreamfilebuf本文重点介绍ifstream。原创 2023-11-27 21:06:21 · 289 阅读 · 0 评论 -
c++类模板template中的typename使用方法
在一个特定的时期,由于历史、技术、思想等各方面的因素,设计总会向现实做出一定的让步,出现一些“不完美”的设计,为了保持向后兼容,有些“不完美”的历史因素被保留了下来。现在我可以理解经常为人所诟病的Windows操作系统,Intel芯片,IE浏览器,Visual C++等,为了保持向后兼容,不得不在新的设计中仍然保留这些“不完美”,虽然带来的是更多的优秀特性,但有些人却总因为这些历史因素而唾弃它们,也为自己曾有一样的举动而羞愧不已。,一查才发现原来它是一种非常高级的技术,在更现的高级语言中已经很普遍。原创 2023-10-10 07:31:19 · 310 阅读 · 0 评论 -
VC中易混淆的几个概念系列(一):初始化与关闭对话框
这个函数还销毁窗口的菜单,清空线程的消息队列,销毁与窗口过程相关的定时器,解除窗口对剪贴板的拥有权,打断剪贴板器的查看链。消息的时候,对话框及子控件还未创建完成,亦是说只是通知系统说要开始创建窗口啦,这个消息响应完之后,对话框和子控件才开始创建。VC中对于对话框的创建和关闭,消息的发送接收,往往涉及到很多函数,初学者往往很容易搞混,导致出现一些列问题,本系列文章针对这些概念进行区分,以更好的做好界面设计。,你可以给成员变量赋值,也可以修改窗口的基本内容比如风格,但是不能对窗口控件操作,因为窗口还没有建立。原创 2023-09-23 10:36:43 · 235 阅读 · 0 评论 -
Windows C++内存泄漏调试技术——系列3
写程序时经常会用到第三方模块和系统自带的模块,而这2种我们都是没有源码的,一旦发生内存泄漏,传统的日志排查法或一般的计数等手段好像都行不通了,这时候咋办?WinDbg只能监测两个时间点申请堆内存的变化量,并没有统计释放的堆内存,所以统计出来的结果中,排第一的并不一定是内存泄漏的项,还是需要结合代码进行过滤,这是个问题点。堆内存申请数量从高到低排序,每一项统计结果都有详细的函数调用堆栈,一般只需要分析使用量较高的前几项即可。最终会分析出使用堆内存的函数调用堆栈,为了方便查看函数调用堆栈的具体函数,需要设置。原创 2023-09-20 17:45:18 · 319 阅读 · 0 评论 -
C++ 深拷贝、浅拷贝
浅拷贝:可以理解为进行简单的拷贝,对于对象(Object)第一层的元素的属性值是基本类型的就相当于是基本类型的号运算,完全复制;对于第一层的元素的属性值是引用类型的相当于还是引用类型的号运算,这样子复制的还是引用类型的内存地址,而不是实体,所以还是会出现前后关联的问题;深拷贝:对于深拷贝,那就是可以理解为不管第几层,两者的关联都被剪断了,这前后两个变量没有任何关联,互不影响,相互独立。总的来说,两者主要的区别是:对于第一层的属性为引用类型数据进行复制的时候,复制的是数据的引用还是实例。原创 2023-09-14 21:46:59 · 176 阅读 · 0 评论 -
Windows C++内存泄漏调试技术——系列2
2)选择该进程需要监听的项目 通常需要监听的是:Handle Count(句柄数)、private Bytes(程序拥有的私有字节)、Virtual bytes(虚拟。开启监听,等程序运行一段时间后,在excel表中对working set-private这一列的数据用折线图进行统计,如果是上升的曲线可以确定此程序存在内存泄露。(处理器),这里的选项由需要监听的属性而定,这里暂且监听的是测试程序该进程的相关属性。,如果你的开发环境是在windows下,那么我们就可以使用windows自带的。原创 2023-09-08 14:23:19 · 382 阅读 · 0 评论 -
Windows C++内存泄漏调试技术——系列1
内存泄漏()是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。当我们在程序中对原始指针()使用new操作符或者free函数的时候,实际上是在堆上为其分配内存,这个内存指的是RAM,而不是硬盘等永久存储。持续申请而不释放(或者少量释放)内存的应用程序,最终因内存耗尽导致OOM为了方便大家理解内存泄漏的危害,举个简单的例子。有一个宾馆,共有100间房间,顾客每次都是在前台进行登记,然后拿到房间钥匙。原创 2023-08-27 10:54:37 · 348 阅读 · 0 评论 -
良好的编程实践——不要在for循环中return
在for循环中使用return 0语句,意味着当程序执行到该语句时,立即退出当前函数,并返回值0。通常情况下,我们会在main函数中使用return 0语句,以表示程序正常结束。虽然在某些情况下,在for循环中使用return语句可能是可以工作的,但这通常不是一个良好的编程实践,因为它可能。在大多数情况下,我们应该避免在循环中使用return语句,而应该使用break语句来提前结束循环。但是,如果在for循环中使用return 0语句,则会导致该循环提前结束,从而可能。在大多数情况下,推荐使用。原创 2023-08-08 07:50:28 · 1387 阅读 · 1 评论 -
查找特定元素——C++ 算法库(std::find_if)
代码仓库地址:https://github.com/joeaaron/LearningC-,欢迎各位。)函数,的一些常见用法示例,实际上,该函数非常灵活,可以适用于各种不同的条件判断场景。哦,也诚邀有精力或有兴趣的小伙伴一起加入,让C++学习不再那么孤单~函数作为谓词函数,用于检查一个数字是否为奇数。函数用于检查一个字符串是否包含某个子串。容器中查找第一个满足奇数条件的元素,并打印出来。在这个例子中,我们定义了一个。在这个例子中,我们定义了一个。中查找第一个包含目标子串。的字符,并打印出结果。原创 2023-08-03 17:36:54 · 422 阅读 · 0 评论 -
版本兼容问题——C++ 字符串库(std::basic_string::stoi)
一般来说 C++ 的库函数调用时,如果发生参数使用不当,或参数超限等,程序会直接抛出异常而终止运行,但这并不是我们想要的结果,我们往往。软件开发过程中经常会存在版本更迭问题,对于如何做好版本之间的兼容性,相信也是八仙过海,各有神通。乍一看,好像没什么问题,就是根据**“.”**来提取版本号中的数字然后用。哦,也诚邀有精力或有兴趣的小伙伴一起加入,让C++学习不再那么孤单~,如果需要翻墙不方便,大家可以私信我,后续转到gitee平台。那么,当我们确定了一个版本,怎么比较版本之间的差异呢?原创 2023-07-30 23:02:13 · 520 阅读 · 0 评论 -
C++《i+1》
C++起源于20世纪80年代,是从C语言发展而来的。它旨在提供更多的功能并与面向对象编程(OOP)的概念相结合。C++通过引入类(class)和对象(object)的概念,使得程序的设计和组织更加模块化和可扩展。无论是初学者还是有经验的开发者,都值得深入学习和掌握C++,以便在各种领域中构建高质量的应用程序。这种编译方式使得C++程序具有高效性和速度优势,能够充分利用硬件资源。当今计算机科学领域中最受欢迎和广泛使用的编程语言之一就是C++。C++是一种高级编程语言,具有强大的功能和广泛的应用领域,包括。原创 2023-07-27 21:58:32 · 329 阅读 · 0 评论 -
全面了解C++编程语言:从入门到精通
学习C++可能会面临一些挑战,但是通过系统的学习和实践,你将逐步掌握这门强大的编程语言。记得坚持、保持耐心,并享受学习的过程。C++的学习旅程一定会为你带来丰富的编程技能和职业发展的机会。C++是一门广泛使用的编程语言,被广泛应用于系统开发、游戏开发、嵌入式系统、图形用户界面(GUI)等领域。它是继C语言之后发展起来的一门面向对象的编程语言,具有高度的灵活性和强大的性能。再次,C++还是游戏开发中最常用的编程语言之一,因为它不仅能提供。下面将介绍C++学习的步骤和资源,本专栏将帮助你从入门到精通。原创 2023-07-21 10:53:43 · 661 阅读 · 0 评论 -
GetLastError 函数
1642〗-Windows 安装服务无法安装升级修补程序,因为被升级的程序可能会丢失或是升级修补程序可能更新此程序的一个不同版本。〖3029〗-因为用户帐户数据库 (NET.ACC) 找不到或损坏,而且也没有可用的备份数据库,所以不能启动本地安全机制。〖3185〗-因为用户帐户数据库 (NET.ACC) 找不到或损坏,而且也没有可用的备份数据库,所以不能启动本地安全机制。〖1015〗-注册表损坏。包含注册表数据的某一文件结构损坏,或系统的文件内存映像损坏,或因为替代副本、日志缺少或损坏而无法恢复文件。原创 2023-06-16 16:51:26 · 633 阅读 · 0 评论 -
C++ Primer第五版_第十九章习题答案(21~26)
为你的 Token 类添加一个 Sales_data 类型的成员。编写一系列赋值运算符,令其分别接收 union 中各种类型的值。如果我们将一个 Token 对象付给它自己将发生什么情况?为你的 Token 类添加移动构造函数和移动赋值运算符。编写你自己的 Token 类。不合法,C语言不支持函数重载。原创 2023-05-28 16:34:33 · 232 阅读 · 0 评论 -
C++ Primer第五版_第十九章习题答案(11~20)
当初始化这样一个指针时,我们令其指向类的某个成员,但是不指定该成员所属的对象;定义一个成员指针,令其可以指向 Screen 类的 cursor 成员。不合法,Screen中get_cursor函数返回的为pos类型,get函数返回的为char类型。声明一个类型别名,令其作为指向 Sales_data 的 avg_price 成员的指针的同义词。定义一个类型,使其可以表示指向 Sales_data 类的 bookNo 成员的指针。和普通函数指针不同的是,在成员函数和指向该成员的指针之间不存在自动转换规则。原创 2023-05-28 16:32:02 · 1077 阅读 · 0 评论 -
C++ Primer第五版_第十九章习题答案(1~10)
打印一条表示类型转换是否成功的信息,确保实际输出的结果与期望的一致。编写与本节最后一个程序类似的代码,令其打印你的编译器为一些常见类型所起的名字。编写与上一个练习类似的转换,这一次将 Query_base 对象转换为 AndQuery 的引用。我们想使用基类对象的指针或引用执行某个派生类操作并且该操作不是虚函数,则可以使用RTTI运算符(该类类型应该含有虚函数)。已知存在如下的类继承体系,其中每个类定义了一个默认公有的构造函数和一个虚析构函数。(b)失败,pb是指向B的指针,不能转换为指向C的指针;原创 2023-05-28 16:23:26 · 1035 阅读 · 0 评论 -
C++ Primer第五版_第十八章习题答案(21~30)
在第714页,我们使用一个指向 Panda 对象的 Bear 指针进行了一系列调用,假设我们使用的是一个指向 Panda 对象的 ZooAnimal 指针将会发生什么情况,请对这些调用语句逐一进行说明。Derived1::bar(bar不仅是Base的成员,也是Derived1的成员,派生类的bar比共享虚机类的bar优先级更高);使用练习18.22的继承体系以及下面定义的类 D,同时假定每个类都定义了默认构造函数,请问下面的哪些类型转换是不被允许的?如果有,请指出来并说明错误的原因。原创 2023-05-26 17:47:52 · 1213 阅读 · 0 评论 -
C++ Primer第五版_第十八章习题答案(11~20)
假定在下面的代码中标记为“位置1”的地方是对命名空间 Exercise中所有成员的using声明,请解释代码的含义。using指示引入的名字的作用域远比using声明引入的名字的作用域复杂。它具有将命名空间成员提升到包含命名空间本身和using指示的最近作用域的能力。通常情况下,命名空间中会含有一些不能出现在局部作用域的定义,因此using指示一般被看作是出现在最近的外层作用域中。将只使用标准库的swap,如果v1.mem1和v2.mem1为用户自定义类型,将无法使用用户定义的针对该类型的swap。原创 2023-05-26 17:42:14 · 1380 阅读 · 0 评论 -
C++ Primer第五版_第十八章习题答案(1~10)
为该程序编写两个不同的版本:一个处理异常,另一个不处理异常。观察并比较这两个程序的行为,用心体会当出现了一个未被捕获的异常时程序会发生什么情况。回顾你之前编写的各个类,为它们的构造函数和析构函数添加正确的异常说明。定义本节描述的书店程序异常类,然后为 Sales_data 类重新编写一个复合赋值运算符并令其抛出一个异常。throw p,此时抛出的为指向局部对象的指针,我们几乎可以肯定这是一种错误行为。程序详见18.9,出现一个未被捕获的异常时,程序将会执行terminate。(b) 可以捕获所有的异常。原创 2023-05-26 17:34:49 · 1206 阅读 · 0 评论 -
C++中二进制、字符串、十六进制、十进制之间的转换
【代码】C++中二进制、字符串、十六进制、十进制之间的转换。原创 2023-05-23 14:11:59 · 191 阅读 · 0 评论 -
C++ Primer第五版_第十七章习题答案(31~39)
测试你的程序,给定一个文件,既包含空行又包含长度超过你传递给geiline的字符数组大小的行。修改11.3.6节中的单词转换程序,允许对一个给定单词有多种转换方式,每次随机选择一种进行实际转换。修改第670页中的程序,打印2的平方根,但这次打印十六进制数字的大写形式。对于本节中的游戏程序,如果在do循环内定义b和e,会发生什么?扩展上一题中你的程序,将读入的每个单词打印到它所在的行。修改上一题中的程序,打印不同的浮点数,使它们排成一列。对本节给出的 seek程序,编写你自己的版本。每次的随机数都相同。原创 2023-05-21 22:29:39 · 445 阅读 · 0 评论 -
C++ Primer第五版_第十七章习题答案(21~30)
重写你的电话号码程序,使之对多于一个电话号码的人只输出第二个和后续号码。编写函数,每次调用生成并返回一个均匀分布的随机unsigned int。重写你的电话号码程序,使之允许在号码的三个部分之间放置任意多个空白符。再次修改你的程序,此次增加两个参数,表示函数允许返回的最小值和最大值。使用本节定义的valid 函数重写8.3.2节中的电话号码程序。修改上一题中编写的函数,允许用户提供一个种子作为可选参数。重写你的电话号码程序,使之只输出每个人的第一个电话号码。编写你自己版本的重拍电话号码格式的程序。原创 2023-05-21 22:24:04 · 315 阅读 · 0 评论 -
C++ Primer第五版_第十七章习题答案(11~20)
用此模式测试你的程序,检查你的答案是否正确。编写程序,使用模式查找违反“i在e之前,除非在c之后”规则的单词。定义一个数据结构,包含一个整型对象,记录一个包含10个问题的真/假测验的解答。使用前一题中的数据结构,编写一个函数,它接受一个问题编号和一个表示真/假解答的值,函数根据这两个参数更新测验的解答。修改你的程序,忽略包含“ei”但并非拼写错误的单词,如“albeit”和“neighbor”。运行你的程序,观察编译器对每个错误的输出。更新你的程序,令它查找输入序列中所有违反"ei"语法规则的单词。原创 2023-05-16 22:14:56 · 516 阅读 · 0 评论 -
C++ Primer第五版_第十七章习题答案(1~10)
使用序列1、2、3、5、8、13、21初始化一个bitset,将这些位置置位。对另一个bitset进行默认初始化,并编写一小段程序将其恰当的位置位。你认为哪种设计更好?定义一个 tuple,保存一个 string、一个vector 和一个 pair<string, int>。定义一个保存三个 int 值的 tuple,并将其成员分别初始化为10、20和30。重写 findBook,令其返回一个 pair,包含一个索引和一个迭代器pair。解释你更倾向于哪个版本的findBook,为什么。原创 2023-05-16 22:09:22 · 416 阅读 · 0 评论 -
C++ Primer第五版_第十六章习题答案(61~67)
定义一个函数模版,统计一个给定值在一个vecor中出现的次数。测试你的函数,分别传递给它一个double的vector,一个int的vector以及一个string的vector。在16.3节中我们定义了两个重载的 debug_rep 版本,一个接受 const char* 参数,另一个接受 char * 参数。会改变函数匹配顺序,几个函数都提供同样好的匹配的情况下,编译器会选择非模板版本。定义特例化版本会影响 debug_rep 的函数匹配吗?不会改变,特例化模板函数不会重载函数,不会影响函数匹配顺序。原创 2023-05-14 09:23:20 · 631 阅读 · 0 评论 -
C++ Primer第五版_第十六章习题答案(51~60)
比较你的可变参数版本的 errorMsg 和6.2.6节中的 error_msg函数。编写你自己版本的 print 函数,并打印一个、两个及五个实参来测试它,要打印的每个实参都应有不同的类型。为你的 StrVec 类及你为16.1.2节练习中编写的 Vec 类添加 emplace_back 函数。如果我们的可变参数版本 print 的定义之后声明非可变参数版本,解释可变参数的版本会如何执行。是一个可变模版函数,它将参数包转发然后构造一个对象,再然后一个指向该对象的智能指针。可变参数版本有更好的灵活性。原创 2023-05-14 09:17:17 · 403 阅读 · 0 评论 -
C++ Primer第五版_第十六章习题答案(41~50)
使用与第一题中相同的三个调用,如果 g 的函数参数声明为 T(而不是T&&),确定T的类型。如果下面的模版,如果我们对一个像42这样的字面常量调用g,解释会发生什么?使用上一题定义的函数,如果我们调用g(i = ci),g 的模版参数将是什么?编写你自己版本的翻转函数,通过调用接受左值和右值引用参数的函数来测试它。编写一个新的 sum 版本,它返回类型保证足够大,足以容纳加法结果。在每个循环中,对 elem 的解引用操作 * 当中,会返回一个左值,的时候,模板参数T对这三个调用都为int。原创 2023-05-14 09:11:20 · 835 阅读 · 0 评论 -
C++ Primer第五版_第十六章习题答案(31~40)
标准库 max 函数有两个参数,它返回实参中的较大者。在模版实参推断过程中,编译器使用函数调用中的实参类型来寻找模版实参,用这些模版实参生成的函数版本与给定的函数调用最为匹配。对16.1.1节 中的原始版本的 compare 函数,使用一个显式模版实参,使得可以向函数传递两个字符串字面量。解释为什么需要显式模版实参以及它是如果使用的。如果合法,对可以传递的实参类型有什么限制(如果有的话)?如果调用合法,T 的类型是什么?如果合法,T 的类型是什么?指出在模版实参推断过程中允许对函数实参进行的两种类型转换。原创 2023-05-14 09:05:29 · 461 阅读 · 0 评论 -
C++ Primer第五版_第十六章习题答案(21~30)
重新运行你的一些程序,验证你的 shared_ptr 类和修改后的 Blob 类。(注意:实现 weak_ptr 类型超出了本书范围,因此你不能将BlobPtr类与你修改后的Blob一起使用。对下面每条带标签的语句,解释发生了什么样的实例化(如果有的话)。会使用 NoDefault 的默认构造函数,而 NoDefault 没有默认构造函数,因此是不可以的。修改你的 Blob 类,用你自己的 shared_ptr 代替标准库中的版本。(a)、(b)、©、(f) 都发生了实例化,(d)、(e) 没有实例化。原创 2023-05-11 21:49:31 · 686 阅读 · 0 评论