Рассмотрим следующий код:
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;
}
Я не могу определить, разрешено ли buffer
в main повторно использовать память, ранее занятую временным объектом class Test
.Согласно Стандартному автоматическому хранилищу (3.7.2 / 1) должно сохраняться как минимум до конца блока .
. Я не могу найти фразу, которая заставила бы временный объект использовать автоматическийхранилище, за исключением 6.6 / 2, где описан оператор перехода и говорится, что при выходе из области [...], деструкторы (12.4) вызываются для всех построенных объектов с автоматической продолжительностью хранения (3.7.2) (именованные объектыили временных) , что, по-видимому, подразумевает, что временные используют автоматическое хранение.
Требуется ли временным лицам использовать автоматическое хранение?Разрешено ли локальной переменной в main
в приведенном выше коде повторно использовать память, ранее занятую временным хранилищем, или она должна использовать отдельное хранилище?