В моей программе на C++ много указателей на файлы и есть много операторов возврата.
Чтобы избежать выполнения инструкции return, не закрывая все открытые указатели файлов, я написал этот класс, исходя из предположения, что мне гарантировано, что все деструкторы объектов автоматически вызываются при достижении оператора return.
Является ли мое предположение истинным?
И хороший код?
класс File_pointer - это хороший C++?
Конструктор и деструктор в File_pointer.cpp
File_pointer::File_pointer(string filename)
{
fptr.open(filename.c_str());
};
File_pointer::~File_pointer()
{
fptr.close();
};
Пример реализации
int main()
{
File_pointer myfile("myfile.txt");
int x = 2;
switch(x)
{
case 1: return x;
case 2: return x;
default:
break;
};
return 0;
}
Какой тип 'fptr'? Для указателей FILE в стиле C вы можете использовать 'unique_ptr' (http://codereview.stackexchange.com/q/4679), поэтому вам не нужно изобретать колесо. Для C++ iostreams вам даже не нужно ничего делать *. –
Стоит посмотреть [это видео] (http://www.youtube.com/watch?v=OB-bdWKwXsU), особенно с 0:27:30, часть ** Ресурсы и ошибки **. Он отвечает на ваш вопрос – LihO
Спасибо за ответы. Видео закладок ... @KerrekSB Я думал, что перед выходом из программы я всегда должен называть close() для любого указателя, способного писать в файл, или неприятные вещи.Это правда вообще, или я просто трачу свое время на обеспечение этого? – user1361521