首页 > 解决方案 > 共享指针管理堆栈对象

问题描述

我对以下代码感到困惑:

#include <iostream>
#include <memory>
#include <vector>

std::shared_ptr<float> test()
{
    std::vector<float> vec(10);
    vec[0] = 10.1;
    vec[1] = 5.0;
    float* p = &vec[0]; 
    std::shared_ptr<float> p_shared(p, [](void* ptr){}); 
    std::cout<<"Get value 0th: "<<p_shared.get()[0]<<" , 1st: "<<p_shared.get()[1]<< std::endl;
    return p_shared;
}

int main()
{
    std::shared_ptr<float> p1 = test();
    p1.get()[1] = 9.0;
    std::cout<<"Get value 0th: "<<p1.get()[0]<<"    , 1st: "<<p1.get()[1]<<std::endl;
    std::cout<<"End of program"<<std::endl;
}

Get value 0th: 10.1 , 1st: 5
Get value 0th: 0    , 1st: 9
End of program

我不明白为什么 shared_ptr 可以在释放后用于访问内存。这是否意味着 shared_ptr 实际上延长了 vec 的生命周期?

标签: c++

解决方案


推荐阅读