为什么make_shared在单独的调用中分配相同的地址?

End*_*der 2 c++ c++11

为什么此make_shared在两个单独的调用中分配相同的内存地址?

typedef struct {
    int a;
    int b;
    int c;
} test_t;

void call_func()
{
    std::shared_ptr<test_t> tst = std::make_shared<test_t>();

    std::cout << "addr: " << tst << std::endl;
}

int main()
{
    call_func();
    call_func();
}
Run Code Online (Sandbox Code Playgroud)

它在线上:http : //coliru.stacked-crooked.com/a/ffc92bc131009402

Rem*_*eau 12

因为可以。

call_func()test_t在可用内存中创建一个新对象,并将其包装在中std::shared_ptr。退出范围时,test_t对象将被销毁。std::shared_ptrcall_func()

因此,当第一个调用call_func()退出时,它使用的内存已被释放,并且在第二个调用call_func()被调用时可以重新使用。

这是正常行为,无需担心。