Nil*_*esh 3 c++ variables global-variables
我试图识别可以在C++中为变量分配存储的语句.到现在为止,我想出了:
int a;与各种存储,范围符(auto,static,global).malloc,new等等.虽然在技术上对存储pointer在其声明中进行分配.我在这里计算所有这些案件.
malloc/new/calloc或被调用函数可能分配存储的函数调用.我无法想到任何其他方式,但我有一个暗示可能会有更多.我希望人们能够理解我所要求的内容,即使这个问题可能没有正确表达.:)欢迎任何输入.
最好的方法是按内存类对分配语句进行分组:
所有静态分配都来自声明.具体说明类模板实例化.模板中的静态数据字段显示为一个声明,而它们在数据段中生成与此模板的实例化一样多的数据字段.函数/方法内的静态对象没有全局名称::Namesp::Class1::Class2::Smth.类或命名空间中的常规静态对象始终具有此类名称.
堆栈分配来自局部变量的声明和函数的参数.当某些东西传递给函数(ref,ptr,val等)时,最好将其威胁为根据参数声明而不是动态生成的东西创建的东西.
除此之外,在计算表达式期间以及从函数/方法返回某些内容时存在临时变量.它们都是堆栈分配.
堆分配始终是明确的.它们是用malloc(或其中一种),new或new []创建的.
异常与throw声明一起分配.当控制退出catch块时,它们被隐含地删除.请注意,如果某些东西被抛出Some-Class*(即作为指针),那么C++运行时将只破坏指针本身,即它会执行一个no-op.在这种情况下,应该通过catch块内的用户代码删除该对象.否则这将是一个香草memory-leak/
以声明它们的方式线程化本地对象与静态非常相似.它们只有多个副本.