标准库中有一些明显的部分在堆上进行内存分配,例如std::string,std::vector,std::list和std::map .其他部分有时会以一种不太明显的方式“意外地”分配内存,例如std::function .除了字符串和容器之外,标准库的哪些部分可能会导致堆上的内存分配?我对那些不明显的情况最感兴趣。
std::string
std::vector
std::list
std::map
std::function
kqlmhetl1#
C++标准库中明确分配内存的部分和标准库中明确不分配内存的部分之间没有明确的界限。在某些特定情况下,标准完全禁止类型或函数进行动态分配(optional和variant被明确禁止使用动态分配实现)。在某些特定的情况下,如果没有完全要求实现执行动态分配(任何显式指定为能够抛出std::bad_alloc的操作)。但是除了这些情况,你不能真正知道,除了那些被明确禁止的情况,你将不得不依赖于实现的质量。
optional
variant
std::bad_alloc
1条答案
按热度按时间kqlmhetl1#
C++标准库中明确分配内存的部分和标准库中明确不分配内存的部分之间没有明确的界限。在某些特定情况下,标准完全禁止类型或函数进行动态分配(
optional
和variant
被明确禁止使用动态分配实现)。在某些特定的情况下,如果没有完全要求实现执行动态分配(任何显式指定为能够抛出std::bad_alloc
的操作)。但是除了这些情况,你不能真正知道,除了那些被明确禁止的情况,你将不得不依赖于实现的质量。