C ++ API Cinema4D предлагает тип BaseObject
и производный (но без виртуальных функций) тип PolygonObject
.Оба типа определяют свои собственные функции Alloc
и Free
- есть
static void BaseObject::Free(BaseObject *&);
и
static void PolygonObject::Free(PolygonObject *&);
Если я попытаюсь освободить PolygonObject
, используя BaseObject::Free
, Я получаю ошибку компиляции не может преобразовать аргумент 1 из 'PolygonObject *' в 'BaseObject * &' :
PolygonObject *poly_obj = PolygonObject::Alloc(3, 1);
BaseObject::Free(poly_obj);
Однако я могу использовать static_cast
для приведения моего PolygonObject *
до BaseObject *
, и неожиданно код компилируется:
PolygonObject *poly_obj = PolygonObject::Alloc(3, 1);
BaseObject *poly_as_base_obj = static_cast<BaseObject *>(poly_obj);
BaseObject::Free(poly_as_base_obj);
В документации Cinema4D я не смог найти информацию о том, является ли этот код правильным или нет.Можно ли освободить PolygonObject
с помощью BaseObject::Free
через static_cast<BaseObject *>
?