【发布时间】:2013-08-10 14:30:03
【问题描述】:
假设我有两个 A 类和 B 类。B 类可以通过两种方式使用 A。
第一:
class B
{
A *a;
}
第二:
class B
{
A a;
}
与Second 相比,为什么大多数C++ 库更喜欢使用First 版本。使用第二种方法可能有什么缺点。它与堆栈与堆分配有关吗?请澄清。
【问题讨论】:
-
我不知道为什么你认为第一个版本更好,我通常使用第二个。第一个,类的分配和删除要小心,
-
这取决于你如何定义
use? -
“为什么大多数 C++ 库更喜欢使用第一个版本而不是第二个版本” 那么您查看了超过 50% 的现有 C++ 库?开玩笑,他们是不同的。例如。 Why not use pointers for everything? 和许多其他答案。
-
这取决于如何使用 A。例如,如果您在 B 上有一个用于 A 的 getter 函数,它返回一个指向它的指针:
A* a = b->getA();,然后 b 被删除,那么在第二个示例中,您将有一个悬空指针*a -
您还可以存储对 A 类实例的引用。