存储基础对象和派生对象混合的容器?

use*_*625 2 c++ inheritance

什么是正确的做法?我知道如果容器是基类值类型,那么存储的派生对象是"切片".如果container是派生类类型,则无法存储基类对象.对?

如果要使用指针,则无法使用auto_ptr,因为它具有复制语义问题.shared_ptr是解决此问题的唯一解决方案吗?

任何人都可以提供更多细节,示例代码或解决此问题的在线文章吗?这应该是一个很常见的问题,但是我没有在教科书或网上找到太多关于它的信息.

提前致谢.

顺便说一下,我只搜索unique_ptr.它似乎不支持复制语义.因此,在STL中使用auto_ptr只是安全吗?但是由于缺少复制语义,许多STL操作或算法不能用于unique_ptr的容器?

rod*_*igo 5

如果您想要多态行为(并且您确实需要它),那么您必须使用指针或引用.许多地方都有很好的记录.

由于您不能使用引用容器,因此必须使用指针容器.

现在,你可以用你认为合适的任何类型的指针:unique_ptr,shared_ptr或原始指针.

  • 确实,您无法创建引用容器.但是你可以用`std :: reference_wrapper <T>`伪造它.它包含一个指针,但允许您通过引用访问它. (2认同)