C++ 将属性转换为指针以减小类的大小是否有缺点?

标签 c++ class pointers

我正在使用 std::vector<T> (16 字节)在我的类(class)。这将我的类的大小增加了 16 个字节。作为一个大量使用的类(也在数组中),我考虑更换 std::vector<T>std::unique_ptr<std::vector<T>>减少到 4 个字节的大小。那么这样做有什么坏处吗?还是这只是设计内存友好类的常规步骤?

编辑:我一开始就在考虑这个方法,因为我假设我的类实例没有构造任何指针。但表面上看std::optional正如 SergeyA 谢天谢地指出的那样,这里是更好的选择。

编辑 2:因为答案是是的,所以有缺点std::optional也不是我想要的,我觉得我必须进一步澄清(并解释更多我的实现)。我将在 another post 中重写我的问题.事实证明,这比我最初预期的要复杂得多。

最佳答案

这样做,您将增加应用程序的内存消耗 - 现在每个对象将使用 8 个字节作为 unique_ptr,此外还有 16 个字节用于 vector ,分配在动态存储(堆)中的其他地方。

您还会增加内存碎片并在访问所述 vector 时添加额外的间接步骤 - 导致性能下降。

但是,如果你有可选性,也就是说,有些对象会有 vector ,有些则没有,最好用专门设计的工具来表达这一点:std::optional(部分C++17 或 C++17 之前的编译器中的 experimental)。

关于C++ 将属性转换为指针以减小类的大小是否有缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883017/

相关文章:

c++ - 垂直转动相机(使用角度轴旋转)

oop - 什么是堕落类(Class)?

java - 构建我的 Java Swing 应用程序。 IE。何时何地使用类和不使用类

c# - C++/CLI 中指向托管数组的指针

c++ - 释放内存需要时间吗?

c++ - 您可以在不同的文件中编写 OpenGL 着色器,然后将其链接到程序吗?

javascript - 在 Javascript 中使用 new 和不使用它一样吗?

c++ - 创建邻接表时出现段错误

python - Cython 中的矢量分配

c++ - 将 hana::tuple 中的类型转换为 hana::tuple 中的 std::vector<type>