c++ - 拥有对象实例与拥有指针

标签 c++ pointers

假设我有两个类 A 和 B。类 B 可以通过两种方式使用 A。

首先:

class B
{
  A *a;
}

第二个:

class B
{
  A a;
}

Second 相比,为什么大多数 C++ 库更喜欢使用 First 版本。使用第二种方法的缺点是什么。它与 Stack vs Heap 分配有关吗?请澄清。

最佳答案

拥有实例的一些优势(class B { A a; };):

  • 无需担心 a 的创建和销毁,因为它会自动发生。
  • 无需担心 a 可能是悬空指针或空指针。
  • 内存局部性:a 位于 B 实例所在的位置。如果您有大量的 B 并依次访问每个 BA,这可能会产生显着的速度差异。<
  • 内存效率:不需要存储指针。

为了进行全面概括,可以说这种方法更快并且更安全

拥有指针的一些优点(class B { A *a; };):

  • 多态性:a 实际上可以指向A 的子类。
  • a 无需复制 A 的实例即可重新分配。
  • a 可以独立于 B 存在,甚至可以完全属于另一个对象。
  • a 可以为 null,在不总是需要时释放内存。

为了进行另一个广泛的概括,可以说这种方法更灵活

关于c++ - 拥有对象实例与拥有指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133450/

相关文章:

c++ - 学习 Game Boy C++ 开发的好教程

c++ - 如何在 IDL 中声明宽字符常量

c - C 中的指针何时计算出它引用的内存量?

c++ - C 带有 char[] 的减法

关于使用指针修改 const 变量的困惑

c++ - 如何使用指针访问动态结构数组的成员?

c++ - 检查文件是否存在于C++的某个目录中

c++ - 在 Linux 上使用 poco 卸载库失败

C++ 函数指针类型错误

C++ 字符指针