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

标签 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();
}

这里是在线的: http://coliru.stacked-crooked.com/a/ffc92bc131009402

最佳答案

因为它可以。

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

所以,当第一次调用call_func()时退出时,它使用的内存已被释放,并且可以在第二次调用 call_func() 时重新使用。已制作完成。

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

关于c++ - 为什么 make_shared 在单独的调用中分配相同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58617050/

相关文章:

c++ - 从图像生成轮廓

c++ - 将指针传递给函数并修改它

c++ - BFS 路径 C++ 实现返回返回一个额外的值

c++ - 具有不完整类型和 unique_ptr 的树结构

c++ - 标准 <memory> 文件中 boost::shared_ptr 和 std::shared_ptr 之间的区别

c++ - 错误 : BOOST DISABLE THREADS

c# - WPF 在使用 dotfuscator 后抛出异常?

c++ - exec() 更改程序镜像后 malloc 的内存会发生什么?

c++ - C++ 中括号和逗号表达式中类型的计算顺序 (x0 = y0, x1 = y1, x2 = x0, ...)

c++ - 推导类型