假设我有两个 A 类和 B 类。B 类可以通过两种方式使用 A。
第一的:
class B
{
A *a;
}
第二:
class B
{
A a;
}
为什么大多数 C++ 库更喜欢使用First版本而不是Second. 使用第二种方法可能有什么缺点。它与堆栈与堆分配有关吗?请澄清。
拥有实例 ( class B { A a; };) 的一些优点:
a因为它会自动发生。a可能是悬空指针或空指针。a生活在实例生活的地方B。如果您有大量s 并依次B访问每个Bs ,这可能会产生显着的速度差异。A为了进行广泛的概括,可以说这种方法更快、更安全。
拥有指针的一些优点 ( class B { A *a; };):
a实际上可以指向A.a无需复制A.a可以独立B于另一个对象生活,甚至完全属于另一个对象。a可以为空,如果不总是需要释放内存。再做一个大范围的概括,可以说这种方法更灵活。