Я применил указатели подсчета ссылок (например, 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: Пожалуйста, не говорите мне, чтобы использовать стандартную библиотеку с интеллектуальными указателями, потому что это невозможно в данный момент.
Пожалуйста, разместите код для конструктора копирования. – Danvil
При чтении сообщений об ошибках шаблона важно заметить, что означает 'T' в каждой позиции. Вероятно, ошибка, возможно, говорит о том, что что-то вроде не может конвертировать из 'SP с [T = DerivedClass] в const SP & с [T = BaseClass]', что дополнительная часть информации составляет половину пути к решению. –