【发布时间】:2011-10-30 09:44:15
【问题描述】:
考虑以下代码:
class Test() {
public:
Test()
{
memset( buffer, 0, sizeof( buffer ) );
}
void Process()
{
printf( buffer );
}
private:
char buffer[1000];
};
int main()
{
Test().Process();
char buffer[1000] = {};
print( buffer );
return 0;
}
我无法推断是否允许main中的buffer重用之前被class Test的临时对象占用的内存。根据标准自动存储(3.7.2/1)must persist for at least until the block ends。
我找不到会强制临时对象使用自动存储的措辞,但 6.6/2 除外,其中描述了跳转语句并说 在退出范围 [...] 时,析构函数 (12.4)为所有具有自动存储持续时间 (3.7.2) 的构造对象(命名对象或临时对象)调用,这似乎暗示临时对象使用自动存储。
使用自动存储是否需要临时人员?上面代码中main 中的局部变量是否允许重用之前临时占用的内存,还是应该使用不同的存储?
【问题讨论】:
-
@FredOverflow:我不认为它是重复的,因为这个问题询问 memory 何时变得可重用,这是一个与生命周期不同的概念该内存中包含的对象。所以基本上这个问题是,“标准中的什么文本使内存在临时的生命周期结束后可以重用?”对我来说,应该允许实现是“显而易见的”,我只是不知道标准的哪一部分具体暗示了这一点。
-
@Steve:嗯,我想你是对的。
标签: c++ memory memory-management duration