【发布时间】:2010-04-21 11:48:41
【问题描述】:
我实现了引用计数指针(在示例中称为 SP),但我遇到了我认为不应该出现的多态性问题。
在以下代码中:
SP<BaseClass> foo()
{
// Some logic...
SP<DerivedClass> retPtr = new DerivedClass();
return retPtr;
}
DerivedClass 继承自 BaseClass。使用普通指针这应该可以工作,但使用智能指针它说"cannot convert from 'SP<T>' to 'const SP<T>&",我认为它指的是智能指针的复制构造函数。
如何使用引用计数指针允许这种多态性? 如果我遇到这个问题,我会很感激代码示例,因为显然我在这里做错了。
PS:请不要告诉我使用带有智能指针的标准库,因为目前这是不可能的。
【问题讨论】:
-
请贴出复制构造函数的代码。
-
在阅读模板错误信息时,请务必注意每个位置的
T的含义。该错误可能表示无法从SP<T> with [T = DerivedClass] to const SP<T> & with [T=BaseClass]转换,额外的信息是解决方案的一半。
标签: c++ templates polymorphism smart-pointers