我觉得之前已经问过这个问题,但我无法在SO上找到它,也无法在Google上找到任何有用的信息.也许"covariant"不是我正在寻找的词,但这个概念与函数的协变返回类型非常相似,所以我认为它可能是正确的.这是我想要做的,它给了我一个编译器错误:
class Base;
class Derived : public Base;
SmartPtr<Derived> d = new Derived;
SmartPtr<Base> b = d; // compiler error
Run Code Online (Sandbox Code Playgroud)
假设这些课程充分充实......我想你明白了.它不能转换SmartPtr<Derived>成SmartPtr<Base>某种不明原因.我记得在C++和许多其他语言中这是正常的,虽然目前我不记得为什么.
我的根本问题是:执行此赋值操作的最佳方法是什么?目前,我正在将指针拉出,将其SmartPtr明确地向上转换为基类型,然后将其包装为新SmartPtr的适当类型(请注意,这不会泄漏资源,因为我们的本地SmartPtr类使用侵入式引用计数).那是漫长而凌乱的,尤其是当我需要将SmartPtr另一个对象包裹起来时...任何快捷方式?