Используйте BaseObject :: Free, чтобы освободить PolygonObject (Cinema4D) - PullRequest
0 голосов
/ 18 февраля 2019

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 *>?

...