Почему эта локальная переменная не освобождается в два раза с помощью Shared_ptr? ⇐ C++
Почему эта локальная переменная не освобождается в два раза с помощью Shared_ptr?
В приведенном ниже коде b является локальной переменной и должна быть уничтожена в конце main() с помощью ее члена b.map. ptr_a является общим_ptr и также удалит память, на которую указывает.
struct A { станд::строка ул; }; структура Б { std::unordered_map карта; }; интервал основной() { Б б; b.map["ключ"] = A{"str"}; std::shared_ptr ptr_a(&b.map["key"]); } В моем понимании здесь должна быть двойная бесплатная выдача. Но на самом деле программа работает хорошо, без каких-либо ошибок.
Почему здесь не возникает ошибки?
Похожая программа выйдет из строя, есть ли между ними различия?
struct A { станд::строка ул; }; интервал основной() { А а; std::shared_ptr ptr_a(&a.str); }
В приведенном ниже коде b является локальной переменной и должна быть уничтожена в конце main() с помощью ее члена b.map. ptr_a является общим_ptr и также удалит память, на которую указывает.
struct A { станд::строка ул; }; структура Б { std::unordered_map карта; }; интервал основной() { Б б; b.map["ключ"] = A{"str"}; std::shared_ptr ptr_a(&b.map["key"]); } В моем понимании здесь должна быть двойная бесплатная выдача. Но на самом деле программа работает хорошо, без каких-либо ошибок.
Почему здесь не возникает ошибки?
Похожая программа выйдет из строя, есть ли между ними различия?
struct A { станд::строка ул; }; интервал основной() { А а; std::shared_ptr ptr_a(&a.str); }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение