std::make_shared<int>(10);是在栈空间还是堆空间?

来源:6-19 shared_ptr和weak_ptr代码演示

weixin_慕勒8023578

2022-02-21

看到函数说明有
This function uses ::new to allocate storage for the object. A similar function, allocate_shared, accepts an allocator as argument and uses it to allocate the storage.

那么是否是在堆空间呢?

写回答

1回答

quickzhao

2022-02-21

是在堆上。但是与普通的new分配空间不一样,STL有专门的内存池等机制去分配空间,这样可以防止内存碎片。具体可以看下STL的源码分析。

0
1
weixin_慕勒8023578
确实在堆上 42 int wa = 1; 43 int *wb = new int(10); 44 auto wA = std::make_shared(30); 45 46 cout << "wa" << &wa << endl; 47 cout << "wb" << wb << endl; 48 cout << "wA" << wA << endl; 打印的结果是 wa0x7ffeef20492c wb0x7fd540504080 wA0x7fd5405040a8 后面两个比较接近
2022-02-21
共1条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程