为什么这个 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_t
当 std::shared_ptr
时对象被销毁当 call_func()
超出范围时退出。
所以,当第一次调用call_func()
时退出时,它使用的内存已被释放,并且可以在第二次调用 call_func()
时重新使用。已制作完成。
这是正常行为,无需担心。
关于c++ - 为什么 make_shared 在单独的调用中分配相同的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58617050/