[C++, libX11]

sany79

Подскажите, пожалуйста, такую вещь.
После удаления несущественных деталей пример получается такой:

class XXX
{
Drawable pix;
XXX(void) {pix=XCreatePixmap(dpy, ......);}
~XXX(void) {XFreePixmap(dpy, ......)}
void f(void) {.........}
};

Нужно в программе создать статический объект класса XXX:

int main(void)
{
.......
static XXX xxx;
.......
xxx.f;
xxx.f;
.......
.......
}

К сожалению, обект прекращает жизнедеятельность после выхода из main, когда дисплей dpy уже невалидный, и при выполнении деструктора происходит segmentation fault. Но убирать из деструктора вызов XFreePixmap не хочется, т. к. нужно оставить возможность создавать также и автоматические объекта класса XXX (которые ведут себя очень хорошо).
Как внутри деструктора отследить, живо ли соединение с X-сервером, чтобы не вызывать из него функции libX11? Или следует избрать какую-то другую тактику?
Заранее признателен.

Realist

В этом примере static явно не нужен. Потому как переменная объявлена в main. Мб на самом деле не нужен статик?

sany79

Нет, на самом деле, конечно, нужно создавать объект не в main.

otets-mihail

когда дисплей dpy уже невалидный, и при выполнении деструктора происходит segmentation fault.
Даже после закрытия дисплея через XCloseDisplay или при выключении сервера сегфолта у XFreePixmap не должно быть

sany79

Да, действительно... Видимо, дело в чём-то другом.
Оставить комментарий
Имя или ник:
Комментарий: