Вы, вероятно, не указали путь к заголовкам mysql, который можно найти в / usr / include / mysql, на некоторых системах Unix, я думаю. См. этот пост , это может быть полезно.
Кстати, связанный с вопросом того парня выше, о синтетической конфигурации. Можно добавить следующее в ваш ~ / .vimrc:
let b:syntastic_c_cflags = '-I/usr/include/mysql'
, и вы всегда можете проверить вики-страницу разработчиков на github. Наслаждайтесь!
так: A
- издатель, а B
подписчик?
первый пункт: если B
является экземпляром с AEventHandler
- тогда он все еще используется, поэтому нет, он не будет собираются, если только экземпляр a
недоступен.
второй пункт: а? (прочитаю еще раз ... ) Если оба экземпляра A
и B
недоступны, они будут удалены сборщиком мусора; событие не имеет значения. Если A
доступен, то B
останется активным. Однако подписка на событие никогда никогда не поддерживает A
в действии; это один путь ... A
может поддерживать B
в живых, но B
не поддерживает A
. Это покрывает это?
третий пункт: в большинстве случаев у этих двух вещей одинаковая продолжительность жизни, так что это не проблема. Это становится проблемой только в том случае, если объект, публикующий событие, живет намного дольше, чем объекты с обработчиками. В этом случае вам просто нужно неукоснительно убирать за собой - например: aX - = AEventHandler
. В частности,
Вам действительно следует отвязать обработчик событий, прежде чем уничтожать экземпляр класса, к которому он относится. (Используя ваш код в качестве примера.)
public void UnbindEvent(A a)
{
a.X -= AEventHandler;
}
Я также хотел бы спросить, почему вы устанавливаете переменные класса равными нулю?
Да, события являются ссылками, если вы не отмените регистрацию, объект, реализующий обработчик событий, не будет собираться мусором.
Вы можете сделать это:
Удалить все зарегистрированные события , если A знает, когда они больше не используются.
class A
{
// clearing all registrations
private void ClearEvents()
{
X = null;
}
}
Или вы отменяете регистрацию в B, если B знает, когда они больше не используются. Вам нужно сохранить ссылку на a, чтобы иметь возможность отменить регистрацию.
Вы также можете реализовать IDisposable.
class B : IDisposable
{
private A registeredToA;
public void BindEvent(A a)
{
registeredToA = a;
registeredToA.X += AEventHandler;
}
public void Dispose()
{
registeredToA.x -= AEventHandler;
}
}
Это критическое изменение вашего кода, потому что B всегда нужно удалять.