znaczacy > comp.lang.* > comp.lang.c

Borneq (21.11.2014, 12:20)
bool BST::LoadFromFile(char *fileName)
{
std::ifstream file;
file.open(fileName);
if (!file.good())
{
std::cout << "Plik niepoprawny lub nie istnieje" << std::endl;
return false;
}

std::string line;
while (std::getline(file, line))
{
if (line[0] == ';') continue;
std::cout << line << std::endl;
const char *s = line.c_str();
int numSpaces=0;
while (*s == ' ')
{
numSpaces++;
s++;
}
if (*s == 9) throw "plik nie powinien zawierac tab";
if (*s == 0) throw "linia pliku nie powinien zawierac samych spacji";
}
file.close();
return true;
}

W przypadku wyjatku nie zostanie zamkniety plik. Co robic?
Tomasz Sowa (21.11.2014, 13:07)
Witam, dnia Fri, 21 Nov 2014 11:20:46 +0100
Borneq <borneq> napisal:

> std::string line;
> while (std::getline(file, line))
> {
> if (line[0] == ';') continue;


bum, wyjscie poza bufor

> W przypadku wyjatku nie zostanie zamkniety plik. Co robic?


zostanie zamkniety, hint: desktruktor od std::ifstream
oley (22.11.2014, 19:12)
W dniu 2014-11-21 o 11:20, Borneq pisze:
[..]
> return true;
> }
> W przypadku wyjatku nie zostanie zamkniety plik. Co robic? Czesc,


juz dostales odpowiedz, ze w tym wypadku zadziala destruktor, bo "plik"
to klasa ifstream. Ogólna odpowiedz na twoje pytanie: opakowac w klase,
w konstruktorze przydzielic zasoby, w destruktorze zwolnic. W przypadku
rzucenia wyjatku na pewno zostanie wywolany destruktor i zasoby zostana
zwolnione.

Pozdrawiam
oley
Sebastian Bialy (22.11.2014, 20:08)
On 2014-11-21 11:20, Borneq wrote:
> Co robic?


W ogólnym przypadku uzyc RAII. Jeden ze sposobów to np:

Podobne wątki