《白话C++》第7章 语言
文章平均质量分 55
《白话C++》第7章内容
yanzhenxi
这个作者很懒,什么都没留下…
展开
-
《白话C++》第7章 Page622 规避死锁 使用守护锁
通过前面的例子可见,互斥体基本都是“lock()”和“unlock()”操作结对出现。如果出现光“上锁”不“解锁”的代码,被锁上的代码块就无法再范文,于是所有前来尝试的线程将死等在加锁处……请找出一个使用mutex的前例,去掉其中“unlock”代码,再编译运行,观察程序运行现象。【课堂作业】:感受“死锁”原创 2024-02-22 11:18:33 · 330 阅读 · 0 评论 -
《白话C++》第7章 Page617 多线程 线程同步-互斥体
某个线程在执行某一段代码前,如果成功使用某互斥体对象进行lock操作,后续如果其他线程也想使用某一互斥体执行加锁操作,则该线程将卡在这把锁面前,直到该互斥体调用unlock炒作。不一定,以前述代码为例,50万次等待额外损耗的时间,事实上将超出判断处理global_I的时长。所以构造thread对象是,入参必须是指定的动作,比如函数指针,函数对象,lambda,function对象等等。接着将代码中的两行注释恢复为正常语句,再多执行几次,这下可好,global_I一会儿是-1,一会儿是0,一会儿是3 ……原创 2024-02-22 10:53:36 · 358 阅读 · 0 评论 -
《白话C++》第7章 Page352 7.3.2初始化行为 列表式初始化 自动类型识别
为了突显格调,写代码时,我总是尽量使用“构造式初始化”。”这样的代码,要不厌其烦地为Point结构加上响应的构造函数,像Point这样一个简单的结构,有必要搞一个构造函数吗?如果删除构造入参ay,则对应的“列表式构造”实例只能是:“Point xy{5};确实,Point这么简单,搞个构造函数好像挺装的,但如果没有构造函数,又不方便初始化它的成员数据。如果用于初始化的字面量就是待定义数据的类型,那么可以显式地指明类型。由花括号、数据、逗号组成的“东西”,称为“简单,直接,竟隐约有一种霸气。原创 2024-02-21 23:08:55 · 402 阅读 · 0 评论 -
《白话C++》第7章 Page352 7.3.2初始化行为 赋值式初始化
另外,创建堆对象时,指针指向可以使用赋值式初始化,但所指向的数据本身,无法统一采用赋值式初始化,比如创建一个int类型指针,并初始化所指向的数据为5;反过来说,用着赋值的语法,行着构造函数的行为,是“不清不楚、不明不白、不易理解的”。看起来很像在赋值,但因为是在定义的过程中执行的,因此采用等号来初始化,和使用圆括号的方式效果是一样的。有一个办法可以让类对象构造时,干脆不允许使用赋值式初始化的语法。只需为类的单入参构造函数加上“可以将“赋值式初始化”当成是初始化的“世俗”版本,在字面上,容易令人误解为赋值。原创 2024-02-21 21:35:50 · 363 阅读 · 0 评论 -
《白话C++》第7章 Page348 7.3.2初始化行为 构造式初始化
pt将占用一块内存,这块内存不会得到初始化,意思是原来里面有什么,现在就保留着什么,因此x和y值通常是乱乱的一个数。因此局部数据是否被初始化的选择权在程序员手上,要初始化,就写“int i();”,不想初始化就写“int i;全局数据有特权,如果程序员不为它写初始化的代码,编译器也会自动将它按照“填0”的方式进行初始化。建议:不要依赖全局数据会自动初始化的特性,不管什么数据,只要逻辑上需要,就明确写上初始化代码。初始化规则有了,即当Point新对象产生,不管是在什么内存端,该坐标点将位于坐标轴的原点上。原创 2024-02-21 21:05:44 · 781 阅读 · 0 评论 -
第7章 Page449~451 7.8.9智能指针 std::shared_ptr
严格来讲是管理同一个裸指针,那么问题来了,p2和p1同时管理同一个裸指针,接着p1结束生命,自动释放该裸指针,再接着p2也结束生命,于是再次释放该裸指针,不就造成一个指针被释放两次的结果吗?“std::shared_ptr”采用了相当复杂的技术来保证,当存在多个智能指针共同管理某一裸指针,仅当最后一个智能指针结束生命时,才会真正释放所共享的裸指针。将共享式智能指针A赋值给共享式智能指针B,B将与A管理同一个裸指针,并且在系统某处记录,当前有两个智能指针在管理某一裸指针,简称“计数为二”。原创 2024-02-16 21:22:30 · 858 阅读 · 0 评论 -
第7章 Page449 7.8.9智能指针 std::unique_ptr课堂作业,使用智能指针改写foo()函数
【代码】第7章 Page449 7.8.9智能指针 std::unique_ptr课堂作业,使用智能指针改写foo()函数。原创 2024-02-16 15:08:43 · 414 阅读 · 0 评论 -
第7章 Page446~449 7.8.9智能指针 std::unique_ptr
其中的“”指明它所指向的数据类型是“O”。除了创建方法不太一样,以及不用手工释放之外,智能指针使用上和它所管理的裸指针基本一样。例中的裸指针同样没有名字,在调用智能指针对象的构造函数是,直接使用new生成。如果健忘而负责任的程序员,忘了p是智能指针,写出“delete p”这样的代码,也不用怕,编译器会就出这个错误。名字透露身份,“unique_ptr”是“独占式智能指针”。以上都是让智能指针尽量用起来像裸指针的设计。既要让它用起来就像一个裸指针,又要在关键的地方提醒一下你,它不是一个真的指针。原创 2024-02-16 12:35:37 · 421 阅读 · 0 评论 -
第7章 Page442~446 7.8.9智能指针
使用堆数据有以下几个目的(也可称为作用)如表7-18所列。int* p//全局变量。原创 2024-02-16 00:42:10 · 419 阅读 · 0 评论 -
第7章 7.5.3 引用传递 Page393~395,未写完
原创 2024-01-28 17:58:51 · 379 阅读 · 0 评论 -
第7章 7.5.2 常量引用 Page392
原创 2024-01-28 17:22:24 · 384 阅读 · 0 评论 -
第7章 7.6.5 常量指针 Page406~407
const可以限制指针指向的数据,也可以限制指针的指向const限制指针指向的数据,不可以修改指向的数据,可以改变指向推荐写法常见写法:原创 2024-01-23 21:19:13 · 382 阅读 · 0 评论 -
第7章 7.4.3常量成员函数
原因就是 Introduce() 后面有个const修饰,Introduce() 就是常量成员函数。可以看到Introduce_2修改了对象的成员数据,如果将第10行,修改如下。原创 2023-12-22 13:38:00 · 374 阅读 · 0 评论 -
第7章 语言 7.5.4 右值引用
7.5.4 右值引用。原创 2023-11-27 14:40:12 · 375 阅读 · 0 评论 -
第7章 语言 7.3.7转移行为
【代码】第7章 语言。原创 2023-11-27 15:44:56 · 403 阅读 · 0 评论