What C++ pitfalls should I avoid?(我应该避免哪些 C++ 陷阱?)
问题描述
我记得第一次学习 STL 中的向量,一段时间后,我想在我的一个项目中使用 bool 向量.在看到一些奇怪的行为并做了一些研究之后,我了解到 一个向量bools 并不是真正的 bools 向量.
I remember first learning about vectors in the STL and after some time, I wanted to use a vector of bools for one of my projects. After seeing some strange behavior and doing some research, I learned that a vector of bools is not really a vector of bools.
在 C++ 中还有其他常见的陷阱需要避免吗?
Are there any other common pitfalls to avoid in C++?
推荐答案
一个简短的列表可能是:
A short list might be:
- 通过使用共享指针来管理内存分配和清理来避免内存泄漏
- 使用资源获取即初始化 (RAII) 习惯用法来管理资源清理 - 特别是在存在异常
- 避免在构造函数中调用虚函数
- 尽可能采用极简编码技术 - 例如,仅在需要时声明变量、范围变量以及尽可能提前设计.
- 真正理解代码中的异常处理——包括你抛出的异常,以及你可能间接使用的类抛出的异常.这在存在模板的情况下尤为重要.
- Avoid memory leaks through use shared pointers to manage memory allocation and cleanup
- Use the Resource Acquisition Is Initialization (RAII) idiom to manage resource cleanup - especially in the presence of exceptions
- Avoid calling virtual functions in constructors
- Employ minimalist coding techniques where possible - for example, declaring variables only when needed, scoping variables, and early-out design where possible.
- Truly understand the exception handling in your code - both with regard to exceptions you throw, as well as ones thrown by classes you may be using indirectly. This is especially important in the presence of templates.
RAII、共享指针和极简编码当然不是 C++ 特有的,但它们有助于避免在使用该语言进行开发时经常出现的问题.
RAII, shared pointers and minimalist coding are of course not specific to C++, but they help avoid problems that do frequently crop up when developing in the language.
关于这个主题的一些优秀书籍是:
Some excellent books on this subject are:
- 有效的 C++ - Scott Meyers
- 更有效的 C++ - Scott Meyers
- C++ 编码标准 - Sutter &亚历山德列斯库
- C++ 常见问题 - Cline
阅读这些书对我避免了您所问的那种陷阱的帮助比其他任何事情都大.
Reading these books has helped me more than anything else to avoid the kind of pitfalls you are asking about.
这篇关于我应该避免哪些 C++ 陷阱?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:我应该避免哪些 C++ 陷阱?
基础教程推荐
- 从 std::cin 读取密码 2021-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01