拥有对象与拥有指针的实例

时间:2013-08-08 18:31:43

标签: c++ pointers

假设我有两个A类和B类.B类有两种方法可以使用A.

首先:

class B
{
  A *a;
}

第二

class B
{
  A a;
}

First相比,为什么大多数C ++库更喜欢使用Second版本。使用第二种方法可能有什么不利之处。它与Stack vs Heap赋值有关吗?请澄清。

1 个答案:

答案 0 :(得分:7)

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

  • 无需担心a的创建和破坏,因为它会自动发生。
  • 无需担心a可能是悬空或空指针。
  • 内存位置:a生活在B的实例中。如果你有大量的B并依次访问每个B的{​​{1}},这可能会产生明显的速度差异。
  • 内存效率:无需存储指针。

为了进行大规模的推广,可以说这种方法更快更安全

拥有指针(A

)的一些优点
  • 多态性:class B { A *a; };)实际上可以指向a的子类。
  • 无需复制A的实例即可重新分配
  • a
  • A可以独立于a生活,甚至可以完全归其他对象所有。
  • B可以为null,如果不总是需要,则释放内存。

要进行另一次大规模的推广,可以说这种方法更灵活