hen*_*yao 3 c++ containers destructor stl
ClassA{
public:
std::map<int,int> m_map;
...
...
};
Run Code Online (Sandbox Code Playgroud)
我已经/d1reportSingleClassLayout在visual studio中尝试了但是无法真正解码输出:
1> 0 | ?$map@HHU?$less@H@std@@V?$allocator@U?$pair@$$CBHH@std@@@2@ m_map
1>28 | ......
Run Code Online (Sandbox Code Playgroud)
我的理解是容器的大小不固定,所以在ClassA的Obj的内存布局中,应该存在指向堆中实际m_map内容的指针?
您的std::map实现的精确布局取决于编写标准库的人员.它不是由C++定义的.
您可以调查构建计算机上的标准标头,或者您可以简单地忘记它并编写标准API代码.
但是,是的,某处会有一个或两个指针,指向动态分配的内存.可能相当多.
回答你的问题:
是否有指针指向堆中的m_map?这是一个只有制造商std::map可以回答的问题.我会说是的,但你必须看看map最终找到它的实现.为了使地图动态增长,必须有一个指针.
A类的默认析构函数会自动释放分配给m_map的空间吗?是的,它们的设计考虑到了这一点,因此程序员不必担心内存.但是,它执行此操作的方法也在实现中std::map.
我认为不要太担心这一点是明智的.API旨在减轻您提到的担忧.
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |