求助,想获得一些关于 C++学习的建议

2023-03-29 09:58:01 +08:00
 Symbo1ic

本人为大三本科生,因为对游戏引擎感兴趣自己正在学习并且尝试实践 c++。这是我的项目链接LRE2。最近看了很多文章,觉得自己对 cpp 理解很有问题,比如说关于share_ptr的滥用问题,在个人的项目中处理的非常差。还有就是关于语言的高级特性也是完全不明白,因此希望得到一些关于 cpp 学习的路径。很多推荐的材料感觉都偏基础,而且大部分都是视频材料,个人吸收效果不是很好。如果可以的话希望得到一些文字材料推荐。

4886 次点击
所在节点    C++
27 条回复
111qqz
2023-03-29 10:04:18 +08:00
Symbo1ic
2023-03-29 10:07:17 +08:00
@111qqz 这个感觉还是太底层了,个人认为我需要的是教程,不是工具书。
LaTero
2023-03-29 10:26:04 +08:00
core guidelines 看一下?都很实用的。https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
inhzus
2023-03-29 10:39:54 +08:00
有看过经典三件套吗 Effective C++, More Effective C++, Effective Modern C++
高级特性比如 C++ 20/23 ,cppcon 有一些大纲性质的视频分类的挺好,大概了解之后,自己用一用就会了。
其余的参考 cppreference 比如 C++17 core language features ,逐个查漏补缺...
sl0000
2023-03-29 10:46:14 +08:00
高速上手 C++ 11/14/17/20 https://changkun.de/modern-cpp/
zeal7s
2023-03-29 10:50:16 +08:00
shared_ptr 主要是跟所有权相关,一般一个类用拥有一个对象才会使用 shared_ptr ,如果只是 access 一个对象,用 weak_ptr 或者 raw pointer 就可以。

举个例子,父窗口在逻辑上拥有子窗口,那么父窗口类中就用 shared_ptr hold 住子窗口对象。当子窗口需要使用的父窗口的一些函数时,子窗口就通过 weak_ptr 来 access 父窗口对象进而调用父窗口的函数。这样可以避免循环引用。

一般 shared_ptr 和 weak_ptr 配对使用,unique_ptr 和 raw pointer 配对使用,你分别用这两种方法来实现一个双向链表的功能比如插入和删除就能有所体会。

平时写代码能用 unique_ptr/raw_pointer 配对就尽量用,避免 shared_ptr 引用计数的开销。但是有些情况 shared_ptr 仍然不得不用:比如实现 Graph 相关的算法时候,一个节点会被两个以上节点指向,而且也没有明确的所有权概念。

另外,仅在需要操作对象生命周期时使用智能指针作为函数参数,这部分可以看 C++ Core Guidlines ,讲得比较细。

我自己也是感觉很多 C++书籍讲解智能指针的使用时挺模糊的,比如 C++ primer ,看完语法是会了,但是一写代码就感觉不对劲,每次都会自我怀疑这样写到底对不对。

平时学 C++我比较常看 CppCon 演讲,可以学到很多。
B 站推荐两个 Up 主,感觉 C++相关的系列视频讲得挺好的:
https://space.bilibili.com/1292761396
https://space.bilibili.com/263032155
yangzhezjgs
2023-03-29 10:51:59 +08:00
我大概理解你的意思,你应该想更多“why”这个层面为什么 C++这么设计和具体场景下该怎么写 C++的建议,推荐几本我最近在看的书:
1.《现代 C++语言核心特性解析》 https://book.douban.com/subject/35602582/
2.《深入应用 C++11 》 https://book.douban.com/subject/26419368/
3.《 C++ Software Design 》 https://book.douban.com/subject/35913533/
zeal7s
2023-03-29 10:59:02 +08:00
我记得 CppCon 里有好几个演讲专门讲智能指针的使用,很细,也有不少坑,你可以去搜搜
yangzhezjgs
2023-03-29 10:59:34 +08:00
4.《 C++沉思录》也不错,也是研究设计和编程思想,只是成书年代比较早了,也推荐一下
我觉得核心是要通过学习,在脑子里形成一套写代码时的决策树,了解各种写法背后的权衡和优劣,做出相对正确的选择
chatWell1
2023-03-29 11:12:19 +08:00
1. 《 C++语言的设计与演化》
2. 《深度探究 C++对象模型》
3. 《 STL 深入浅出》
4. 《 C++沉思录》
Yeen
2023-03-29 11:15:06 +08:00
C++ PRIMER
Inside the c++ object model
深入理解计算机系统

剩下的就是自己实践几个超过 2 万行代码的工程,阅读优秀的开源项目。

good luck
hankai17
2023-03-29 11:49:39 +08:00
9L + 1
书本是对知识的总结
zuosiruan
2023-03-29 14:14:11 +08:00
游戏引擎感兴趣......进不了米哈游这种级别的厂毫无意义。加油吧 小伙子
ivvei
2023-03-29 14:25:03 +08:00
shared_ptr 我倾向于直接不用…… 资源谁分配就谁掌控,实在不要了就转走。
fengjianxinghun
2023-03-29 14:27:36 +08:00
Symbo1ic
2023-03-29 16:43:44 +08:00
@zeal7s 所有权这块真的很有启发性。在应对你提到的关于 unique 和 raw 搭配的情况,因为感觉 raw 并不是很靠谱,所以总是用 share 暴力解决。所有权这块的设计真的是很难,这块我也是一直没有弄的很明白。这块在这个视频中也会提到吗?另外感谢大家的分享!
Symbo1ic
2023-03-29 16:45:17 +08:00
@fengjianxinghun 正巧我有朋友学习过 rust ,说实话我感觉 rust 关于所有权那套解法还有一些思想也许可以套到 cpp 的开发中
Symbo1ic
2023-03-29 16:48:29 +08:00
@zuosiruan 是的,现在就业环境也不是很理想。总之先学!总会用到的
Symbo1ic
2023-03-29 16:50:08 +08:00
@yangzhezjgs 关于决策这块的说法不能再赞同了!这种东西也许就叫做 cpp 编程技能了吧。能够正确的在不同场景找到最优的解法,这真的很吸引人
xmmmmovo
2023-03-29 18:38:13 +08:00
游戏引擎......加油......先问一下你之前引擎用的多吗.....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/928055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX