Мое графическое приложение поддерживает полиморфные синхронизированные события, поэтому пользователь вызывает новый, а графический интерфейс удаляет. Это может создать проблему, если среда выполнения несовместима.
Итак, мне сказали, что предлагаемое решение будет таким:
class base;
class Deallocator {
void operator()(base* ptr)
{
delete ptr;
}
}
class base {
public:
base(Deallocator dealloc)
{
m_deleteFunc = dealloc;
}
~base()
{
m_deleteFunc(this);
}
private:
Deallocator m_deleteFunc;
}
int main
{
Deallocator deletefunc;
base baseObj(deletefunc);
}
Хотя это хорошее решение, оно требует, чтобы пользователь создал объект Deallocator, который мне не нужен. Однако мне было интересно, если бы я предоставил Deallocator для каждого производного класса: например,
class derived : public base
{
Deallocator dealloc;
public:
Derived() : base(dealloc);
{
}
};
Я думаю, что это все еще не работает, хотя. Ограничение таково:
Функция addTimedEvent () является частью класса Widget, который также находится в dll, но создается пользователем. Другое ограничение заключается в том, что некоторые классы, производные от Widget, вызывают эту функцию со своими собственными классами событий по времени.
Учитывая, что «тот, кто вызвал new, должен вызвать delete», что может сработать, учитывая эти ограничения?
Спасибо