C++中的存储分配语句
Storage Allocation Statements in C++
我试图确定可以在C++中为变量分配存储的语句。到目前为止,我已经想出了:
- 声明语句:像
int a;
这样的语句,具有各种存储、范围说明符(auto
、static
、global
) - 表达式语句:
堆上的存储可以使用malloc
、new
等进行分配。从技术上讲,尽管pointer
的存储是在其声明中分配的。我在这里数所有这样的案件。- 右侧为
malloc/new/calloc
的Assignment expr或被调用函数可能分配存储的函数调用 - 函数调用expr,该变量通过引用传递,并在被调用函数中分配存储
- 右侧为
我想不出任何其他方法,但我有一点预感,可能还有更多。我希望人们知道我在问什么,即使这个问题的措辞可能不正确。:)欢迎任何意见。
最好的方法是按内存类对分配语句进行分组:
- 静态
- 堆栈
- 堆
- 例外情况
- 线程本地(仅限C++11)
所有静态分配都来自声明。特别注意类模板的实例化。模板中的静态数据字段显示为一个声明,而它们在数据段中生成的数据字段数量与此模板的实例化数量一样多。函数/方法中的静态对象没有像::Namesp::Class1::Class2::Smth
那样的全局名称。类或命名空间中的常规静态对象总是具有这样的名称。
堆栈分配来自函数的局部变量和参数的声明。当一些东西被传递到函数(ref、ptr、val等)中时,最好将其作为根据参数声明创建的东西来威胁,而不是动态生成的东西。
此外,在计算表达式期间以及从函数/方法返回某些内容时,还存在临时变量。它们都是堆栈分配。
堆分配总是显式的。它们是用malloc(或它的一种口味)创造的,无论是新的还是新的[]。
使用throw
语句分配异常。当控制退出catch
块时,它们被隐含地删除。请注意,如果某个东西被抛出为Some-Class*
(即作为指针),那么C++运行时将只销毁指针本身,也就是说,它将执行no-op
。在这种情况下,catch块内的用户代码应该删除该对象。否则,这将是一个香草memory-leak
/
线程本地对象的声明方式与静态对象非常相似。它们只有多个副本。
相关文章:
- scanf() 语句中"%*[^n]"的格式字符串指示什么?分配抑制器 (*) 和否定扫描集 ([^) 如何协同工作?
- 编译器错误"在if语句中分配不兼容的类型"
- 使用 switch 语句将不同的函数作为类属性分配 C++
- 将 if else 语句的最后一个值分配给变量
- 使用函数中的语句数作为内存分配的常量
- 是``if`语句''在modulo之前和分配操作之前的冗余
- 在同一分配语句中进行const char*的多个字符串文字
- 如果/else语句未显示/可变分配问题的输出;初学者程序员
- 如果条件语句中的变量分配
- c++ 在 if 语句中分配引用变量
- 如何预先分配空类对象,然后在if语句的大括号中创建该对象
- 在开关语句中分配 lambda
- 当使用内存分配函数用作条件语句时会发生什么
- 我应该在分配和返回语句中使用static_cast以及原因
- 使用 make_unique 语句重新分配unique_ptr对象 - 内存泄漏
- C++中的存储分配语句
- 如何使用选择语句检索 sqlite 并分配给向量然后分配给字符串
- 制作程序,以便if语句被分配正确的编号
- 在单个语句中将类类型分配给该类的取消引用指针时执行哪些操作
- C++中分配语句的评估顺序