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

bha*_*esh 2 c++ pointers

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

第一:

class B
{
  A *a;
}
Run Code Online (Sandbox Code Playgroud)

第二:

class B
{
  A a;
}
Run Code Online (Sandbox Code Playgroud)

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

Tho*_*mas 7

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

  • 无需担心创建和破坏,a因为它会自动发生.
  • 无需担心a可能是悬空或空指针.
  • 记忆局部性:a生活在B现场的实例中.如果你有大量的Bs并依次访问每个Bs A,这可能会产生明显的速度差异.
  • 内存效率:不需要存储指针.

为了使一个巨大的一概而论,可以说,这种做法是更快更安全.

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

  • 多态性:a实际上可以指向一个子类A.
  • a可以重新分配而无需复制实例A.
  • a可以独立生活,B甚至完全由另一个对象拥有.
  • a 可以为null,如果不总是需要释放内存.

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

  • 使用参考也可以实现多态性."指针"类别的所有优点加上一些"非指针"类别可以使用智能指针来实现. (2认同)