CD
Size: a a a
CD
AT
CD
ПК
std::unique_ptr(utils::unique_ptr(...).release())
CD
std::unique_ptr(utils::unique_ptr(...).release())
CD
ПК
CD
ПК
CD
ПК
A
DS
CD
A
CD
#include <memory>
struct guard {
std::unique_ptr<guard> & guarded;
guard(std::unique_ptr<guard> & guarded) : guarded(guarded) {}
~guard() { guarded = nullptr; }
};
struct test_ok {
std::unique_ptr<guard> pointer;
test_ok() { pointer = std::make_unique<guard>(pointer); }
~test_ok() { pointer.reset(); } //this will be ok
};
struct test_failed {
std::unique_ptr<guard> pointer;
test_failed() { pointer = std::make_unique<guard>(pointer); }
};
int main() {
test_failed{}; //heap corruption
}
AD
A
A
A