复合文字的可移植C ++替代方法,保证没有堆分配

问题描述

C99 compound literalsnot supported in C++。在许多情况下,list intialization一个很好的选择。但是,它们是not guaranteed not to heap-allocate memory

对于C ++代码,是否有任何方便且可移植的替代方法,它们需要完全在没有堆分配的情况下工作?

解决方法

正如所链接问题的答案所表明的那样,由于C ++ 14,编译器无法对初始列表进行堆分配。而且,即使C ++ 14之前的编译器也不会堆分配初始化程序列表,因为绝对没有理由这样做(并且有很多理由不这样做)。

,

如果您的程序完全在没有堆分配的情况下工作,则添加列表初始化会很好,并且不会导致堆内存分配。

初始初始化可能导致堆分配的情况是对象已经使用堆内存的情况,例如std :: list。如果您没有堆,那么您肯定不使用那些。