3

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

第一的:

class B
{
  A *a;
}

第二:

class B
{
  A a;
}

为什么大多数 C++ 库更喜欢使用First版本而不是Second. 使用第二种方法可能有什么缺点。它与堆栈与堆分配有关吗?请澄清。

4

1 回答 1

7

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

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

为了进行广泛的概括,可以说这种方法更快更安全

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

  • 多态性:a实际上可以指向A.
  • a无需复制A.
  • a可以独立B于另一个对象生活,甚至完全属于另一个对象。
  • a可以为空,如果不总是需要释放内存。

再做一个大范围的概括,可以说这种方法更灵活

于 2013-08-08T18:42:55.933 回答