ЛОР, есть нубовопросы.
Есть библиотека на C++, в ней есть некий базовый класс Base и несколько отнаследованных от него (пусть будут Derived1, Derived2 и т.д.). Также для этой библиотеки есть обёртка для C, которая сейчас выглядит примерно так:
void *Derived1_Create() {
Derived1 *der = new Derived1();
return static_cast<void*>(der);
}
...
double Derived1_DoSomething(void *v) {
Derived1 *der = static_cast<Derived1*>(v);
return der->DoSomething();
}
...
void Derived1_Destroy(void *v) {
Derived1 *der = static_cast<Derived1*>(v);
delete der;
}
double Base_DoSomething(void *v) {
Base *bas = static_cast<Base*>(v);
return bas->DoSomething();
}
2) То же самое, но про деструкторы. Если мы будем удалять объекты указанным ниже способом, чем это чревато?
void Base_Destroy(void *v) {
Base *bas = static_cast<Base*>(v);
delete bas;
}
...
int main() {
derived1 = Derived1_Create();
derived42 = Derived42_Create();
Base_Destroy(derived1);
Base_Destroy(derived42);
}