关于正向声明(c++)的问题
Questions about forward declaration (c++)
所以我刚刚读过各种来源的前向声明(例如谷歌c++风格指南),我很困惑什么时候应该使用前向声明,什么时候不应该使用。
一方面,如果我总是向前声明类,我将永远不会遇到循环依赖关系和更快编译时间的问题
但另一方面,我将不得不几乎完全使用指向对象的指针,考虑到内存泄漏和不必要的复杂操作,这似乎很不安全。
那么,我应该在可能的时候使用正向声明吗?还是只有在需要的时候才使用,以避免循环依赖关系之类的东西?
还有一个关于远期申报的问题。如果我使用外部库,如GLM(这是一个数学库),并且我在许多不同的类中都需要它,那么有没有一种方法可以向前声明这些库/这样做有意义吗?
我必须包括的示例(GLM):
#include <glm.hpp>
#include <gtc/matrix_transform.hpp>
#include <gtc/type_ptr.hpp>
例如,我会这样使用它:
std::vector <glm::vec3> vertices;
通常,只有在存在某种循环依赖关系的情况下,前向声明才是必要的,并且通常应该避免。
因此,"只针对循环依赖关系"的版本更加正确。
"指向对象的指针"实际上与这个问题无关,因为在现代C++中,通常大多数时候都应该避免使用原始指针,而是使用现在标准的智能指针之一,或者更好的是,使用引用。根据您要做的操作,使用Pimpl或快速Pimpl习惯用法将类成员排除在类头之外可能也是一种很好的做法。
问题的最后一部分,您可能想做的是将您通常使用的依赖外部库头包含在自己的单个头文件中,然后在需要时将该文件包含在代码模块中。如果您已经设置为使用预编译头,那么这在编译时也可能带来优势。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题