unique_ptr & л; INT & GT; свисающий указатель

Код C ++:

unique_ptr<int> a  = make_unique<int>(159);
auto var = a.get(); // Edited a => a.get() sorry
a.release();
std::cout<<*var<<std::endl; // prints "159"

Является var висячий указатель после этого кода?

0

Решение

Ваш код абсолютно действителен. a.release() отсоединяет динамически размещенный объект от уникального указателя, поэтому a больше не владеет целым числом, но ничего не удаляется.

У вас будет утечка памяти, если вы в конце концов не позвоните delete var, хоть.

5

Другие решения

Нет, после этого кода var это не висящий указатель. Да, если не позвонишь delete явно или использовать еще один умный указатель у вас будет утечка памяти. Умные указатели не гарантируют, что не будет висящих указателей, если вы будете обрабатывать их вручную, например, позвонив release явно после хранения указателя в другом месте.

Кстати, функция make_unique вы используете нестандартно (хотя должно быть в следующей редакции), поэтому ваш код не переносим.

2

нет

вот эквивалент

unique_ptr<int> a  = make_unique<int>(159);
auto var = a.release(); // returns contained pointer and sets a to be empty
std::cout<<*var<<std::endl; // var is still valid here, though you should delete it after
0
По вопросам рекламы [email protected]