Re[3]: scoped lock in plain C (similar to
От: Cyberax Марс  
Дата: 14.12.21 12:09
Оценка:
Здравствуйте, fk0, Вы писали:

C>>На практике можно использовать __attribute__((cleanup)) и не заморачиваться. Поддерживается GCC, clang, icc. А на MSVC уже можно забить.

fk0> Нельзя. Проблема в том, что во-первых не стандарт, во-вторых, что самое главное, работает
fk0>только в рамках функции, а не блока кода.
Неверно.
#include <stdio.h>
#include <stdlib.h>

void scream(void *ptr_ptr) {
        void *ptr = * (void **) ptr_ptr;
        printf("Scream!\n");
        if (ptr) {
                printf("Not Null!\n");
                free(ptr);
        }
}

int main() {
        for(int f=0; f<5; ++f) {
                void *data __attribute__((cleanup(scream))) = malloc(123);
                if (f>2) {
                        free(data);
                        data = 0;
                }
        }
}


Вывод:
Scream!
Not Null!
Scream!
Not Null!
Scream!
Not Null!
Scream!
Scream!


Как адаптировать к lock_guard'у с возможностью предварительного отключения — задача для читателя.
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.