Я должен вручную закрыть ifstream?

Проблема заключалась в кавычках на именах полей numero и razon_social

\App\Models\Clientes::selectRaw( " CONCAT('numero', ' ', 'razon_social') as nombre, id " )->lists('nombre', 'id')->all();

Вам нужно использовать их так:

\App\Models\Clientes::selectRaw( " CONCAT(numero, ' ', razon_social) as nombre, id " )->lists('nombre', 'id')->all();
185
задан Jamal 4 November 2014 в 11:19
поделиться

3 ответа

НЕТ

Для этого и нужен RAII, пусть деструктор сделает это работа. Нет смысла закрывать его вручную, но это не C ++, а программирование на языке C с классами.

Если вы хотите закрыть файл до конца функции, вы всегда можете использовать вложенную область видимости.

В стандарте (27.8.1. 5 Шаблон класса basic_ifstream), ifstream должен быть реализован с элементом basic_filebuf , содержащим фактический дескриптор файла. Он сохраняется как член, поэтому при разрушении объекта ifstream он также вызывает деструктор в basic_filebuf . А из стандарта (27.8.1.2) этот деструктор закрывает файл:

virtual ˜basic_filebuf ();

Effects: Уничтожает объект класса basic_filebuf , Вызовы close () .

237
ответ дан SCFrench 23 November 2019 в 05:54
поделиться

Нет, это делается автоматически деструктором ifstream . Единственная причина, по которой вы должны вызывать его вручную, заключается в том, что экземпляр fstream имеет большую область видимости, например, если он является переменной-членом экземпляра класса долгоживущих классов.

5
ответ дан StaceyGirl 23 November 2019 в 05:54
поделиться

Вам нужно закрыть файл?
НЕТ

Стоит ли закрывать файл?
Зависит.

Вас волнуют возможные ошибки, которые могут возникнуть, если файл не закрывается правильно? Помните, что вызовы close устанавливают (failbit) , если он терпит неудачу. Деструктор автоматически вызовет close () для вас из-за RAII , но не оставит вам способа проверить бит сбоя, поскольку объект больше не существует.

65
ответ дан StaceyGirl 23 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: