假设我有两个A类和B类.B类有两种方法可以使用A.
首先:
class B
{
A *a;
}
第二
class B
{
A a;
}
与First
相比,为什么大多数C ++库更喜欢使用Second
版本。使用第二种方法可能有什么不利之处。它与Stack vs Heap赋值有关吗?请澄清。
答案 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,如果不总是需要,则释放内存。要进行另一次大规模的推广,可以说这种方法更灵活。