Short-
, shared_ptr (). , .
Long-
shared_ptr, ( , ..). &pii->first int*, shared_ptr<int>, int&.
, , , : , , , . shared_ptr. ( ), . (, , , ), , .
, , :
#include <memory>
#include <utility>
using int_pair = std::pair<int, int>;
std::shared_ptr<int> temporary_reference(std::shared_ptr<int_pair>& p)
{
int x = 5;
return std::shared_ptr<int>(p, &x);
}
std::shared_ptr<int> memory_leak(std::shared_ptr<int_pair>& p)
{
return std::shared_ptr<int>(p, new int(5));
}
std::shared_ptr<int> aliased_value(std::shared_ptr<int_pair>& p)
{
return std::shared_ptr<int>(p, &p->first);
}
int main()
{
std::shared_ptr<int_pair> p(new int_pair(5, 3));
auto i1 = temporary_reference(p);
auto i2 = memory_leak(p);
auto i3 = aliased_value(p);
return 0;
}
&p->first, shared_ptr p, . aliasing , aliased shared_ptr.
, , , :
#include <memory>
#include <utility>
using int_pair = std::pair<int, int>;
int main()
{
std::shared_ptr<int_pair> p(new int_pair(5, 3));
int& i = p->first;
p.reset();
return 0;
}