假设我有两个A类和B类.B类有两种方法可以使用A.
第一:
class B
{
A *a;
}
Run Code Online (Sandbox Code Playgroud)
第二:
class B
{
A a;
}
Run Code Online (Sandbox Code Playgroud)
为什么大多数C++库比较喜欢使用First版本Second.使用第二种方法可能有什么不利之处.它与Stack vs Heap赋值有关吗?请澄清.
拥有一个instance(class B { A a; };)的一些优点:
a因为它会自动发生.a可能是悬空或空指针.a生活在B现场的实例中.如果你有大量的Bs并依次访问每个Bs A,这可能会产生明显的速度差异.为了使一个巨大的一概而论,可以说,这种做法是更快和更安全.
拥有指针的一些优点(class B { A *a; };):
a实际上可以指向一个子类A.a可以重新分配而无需复制实例A.a可以独立生活,B甚至完全由另一个对象拥有.a 可以为null,如果不总是需要释放内存.为了进行另一次大规模的推广,可以说这种方法更灵活.