vector_base继承与组合

Foo*_*ant 6 c++ stl

简短问题:

是否有为什么C ++ STL实现使用一个原因vector_base结构/类(到手柄资源和分配器),为基类std::vector,而不是使用组合物

较长版本:

在提高我对C ++的了解的“任务”中,我一直在尝试重新实现一个Vector大多数是std::合规的类。我想我已经足够了解为什么使用分配器明智,为什么您实际上希望将所有内存处理放在单独的类/结构(RAII等)中,但我看不到为什么我们std::vector要从中继承类,而不是将其作为私人成员。 例如,LLVMgcc都使用继承。另一方面,我发现构造函数和赋值运算符(尤其是move-types)使用合成更容易处理。

我只是公开我对语言的肤浅知识吗?

举例来说,我搜索了一本教科书,发现Stroustroup的书与他的2013年的“ C ++编程语言,第四版”对标准的“模拟重新实现”有不同的版本(只是让我更加困惑!)。使用构图及其2014年的“编程:原理与实践,第二版”。使用继承!

任何人都可以帮助我阐明一些想法吗?

n. *_* m. 7

libc ++使用私有继承,而libstdc ++使用受保护的继承。

受保护和私人继承在很大程度上是构成的句法变体

  • @FooBant是的,这是优先考虑的问题。 (3认同)
  • 在这种情况下,@ DanielLangr相反。主类(向量)不添加自己的数据成员,因此它是私有继承的实现的零厚度包装器。 (2认同)