假设我有两个类 A 和 B。类 B 可以通过两种方式使用 A。
首先:
class B
{
A *a;
}
第二个:
class B
{
A a;
}
与 Second
相比,为什么大多数 C++ 库更喜欢使用 First
版本。使用第二种方法的缺点是什么。它与 Stack vs Heap 分配有关吗?请澄清。
最佳答案
拥有实例的一些优势(class B { A a; };
):
- 无需担心
a
的创建和销毁,因为它会自动发生。 - 无需担心
a
可能是悬空指针或空指针。 - 内存局部性:
a
位于B
实例所在的位置。如果您有大量的B
并依次访问每个B
的A
,这可能会产生显着的速度差异。< - 内存效率:不需要存储指针。
为了进行全面概括,可以说这种方法更快并且更安全。
拥有指针的一些优点(class B { A *a; };)
:
- 多态性:
a
实际上可以指向A
的子类。 a
无需复制A
的实例即可重新分配。a
可以独立于B
存在,甚至可以完全属于另一个对象。a
可以为 null,在不总是需要时释放内存。
为了进行另一个广泛的概括,可以说这种方法更灵活。
关于c++ - 拥有对象实例与拥有指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133450/