Destruction order pentru std::unique_ptr (C++)

Am o construcție de genul ăsta:

[...]
    std::unique_ptr<zip_t, decltype(&zip_close)> zip(zip_open_from_source(source, ZIP_RDONLY, &error), &zip_close);
[...]
    std::unique_ptr<zip_file_t, decltype(&zip_fclose)> zfile(zip_fopen(zip.get(), fname.text(), ZIP_FL_UNCHANGED), &zip_fclose);
[...]

ChatGPT zice că există o chestie care se cheamă “reverse destruction order”, dar e tâmpit, îmi zice că primul destructor apelat va fi cel cu zip_close(), ceea ce este fix pe dos față de ce înteleg eu prin “reverse”.

Are cineva idee dacă este garantat de C++ că primul destructor apelat va fi zip_fclose(), abia după aia zip_close()? Să nu-mi crape naibii ceva aleator prin program dacă se închid handlerele pe dos.

https://isocpp.org/wiki/faq/dtors#order-dtors-for-locals

1 Like

Mersi, mai clar de atât nu se putea :slight_smile: