Есть несколько проблем:
int main()
{
PicLib *lib = new PicLib;
beginStorage(lib);
return 0;
}
Лучше всего выделять и удалять память в той же области видимости, чтобы ее было легко обнаружить.
Но в этом случае просто объявите это локально (и передайте по ссылке):
int main()
{
PicLib lib;
beginStorage(lib);
return 0;
}
В beginStorage ()
Но я не вижу причин манипулировать указателем. Передайте его по ссылке и просто используйте его локально.
void beginStorage(PicLib& lib)
{
....
}
В классе PicLib у вас есть указатель RAW: базы данных.
Если у вас есть указатель RAW, которым вы владеете (вы создаете и уничтожаете его), вы должны переопределить сгенерированные компилятором версии конструктора копирования и оператора присваивания. Но в этом случае я не вижу причин использовать указатель, было бы проще просто использовать вектор:
class PivLib
{
private:
std::vector<Pic> databases;
};