Относительно следующей программы C++:
class Base { };
class Child : public Base { };
int main()
{
// Normal: using child as base is allowed
Child *c = new Child();
Base *b = c;
// Double pointers: apparently can't use Child** as Base**
Child **cc = &c;
Base **bb = cc;
return 0;
}
GCC производит следующую ошибку на последнем операторе присваивания:
error: invalid conversion from ‘Child**’ to ‘Base**’
Мой вопрос находится в двух частях:
reinterpret_cast
. Используя эти броски означает выбрасывать всю безопасность типов. Есть ли что-либо, что я могу добавить к определениям классов, чтобы сделать эти указатели броском неявно или по крайней мере формулировать преобразование способом, которое позволяет мне использовать static_cast
вместо этого? Если бы это было разрешено, вы могли бы написать следующее:
*bb = new Base;
И c
в конечном итоге будет указывать на экземпляр Base
. Плохой.