我觉得以前有人问过这个问题,但是我在 SO 上找不到它,在 Google 上也找不到任何有用的东西。也许“协变”不是我要找的词,但这个概念与函数的协变返回类型非常相似,所以我认为它可能是正确的。这是我想做的,它给了我一个编译器错误:
class Base;
class Derived : public Base;
SmartPtr<Derived> d = new Derived;
SmartPtr<Base> b = d; // compiler error
假设这些课程完全充实......我想你明白了。由于某些不清楚的原因,它无法将 a 转换SmartPtr<Derived>
为 a 。SmartPtr<Base>
我记得这在 C++ 和许多其他语言中很正常,但目前我不记得为什么。
我的根本问题是:执行此分配操作的最佳方法是什么?目前,我将指针从 中拉出SmartPtr
,显式地将其向上转换为基本类型,然后将其包装在SmartPtr
适当类型的新类型中(请注意,这不会泄漏资源,因为我们的本土SmartPtr
类使用侵入式引用计数)。那很长而且很乱,尤其是当我需要将其包装SmartPtr
在另一个对象中时……有什么快捷方式吗?