假设我有两个 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
访问每个B
s ,这可能会产生显着的速度差异。A
为了进行广泛的概括,可以说这种方法更快、更安全。
拥有指针的一些优点 ( class B { A *a; };)
:
a
实际上可以指向A
.a
无需复制A
.a
可以独立B
于另一个对象生活,甚至完全属于另一个对象。a
可以为空,如果不总是需要释放内存。再做一个大范围的概括,可以说这种方法更灵活。