In the following code, there is a memory leak if Info::addPart1() is called multiple times by accident:
Info::addPart1()
typedef struct { }part1; typedef struct { }
Checking for nonzero pointer before delete is redundant. delete 0 is guaranteed to be a no-op.
delete 0
A common way to handle this is
delete _ptr1; _ptr1 = 0; _ptr1 = new part1;
Zeroing the pointer ensures there won't be any dangling pointers for example in the case part1 construction throws an exception.