我尝试在C++11中使用初始化器列表的{}表示法来初始化静态局部常量。这个问题可能是one about temporary arrays的后续问题。可能有一个旁注(?)hinting at const(但仅适用于C99?)。另一个问题brings heap allocation into view,但我认为有区别。
其思想是让一个函数在它自己的作用域中建立一个数据结构,一个static
(const)变量定义从所写的列表中取值(出于错误的意图:C风格的复合字面值)。之后,函数应该能够引用结构。上面的SO链接直接或间接地解释了为什么仅仅使用字面值是行不通的。
不过,new
会有帮助吗?
int undef()
{
static const int vs[3] {1,2,3};
static const int* vss[2] {
vs,
// (const int[3]){1,2,3} // temporary will be lost
new const int[3] {1,2,3}
};
return vss[0][1] + vss[1][1];
}
我的猜测是:new
将分配一个数组 somewhere,从临时的{1,2,3}
初始化新的数组,然后 somewhere 继续有一个地址,所以,什么都不会丢失,对吗?
上述new
的使用是否安全可靠,是否被标准?C++11所覆盖。
1条答案
按热度按时间4dc9hkyq1#
这是一个定义好的行为。唯一的问题是技术上的内存泄漏。没有什么会正式地
delete
它,但是它只会被分配一次,并且它会在整个程序的执行过程中存在。大问题。唯一实际的烦恼是静态内存清理程序报告一个“可能的”内存泄漏,就像这样。