My questions are: * In the destructor to Pair, is it necessary for me to delete first and second? If yes, should I do it by calling delete &first; delete &second?
* Assuming that I do NOT have to call delete on first and second, is there anything I should know if I try to delete a pointer to a Pair?
No. Since they are objects instead of pointers to objects, their respective destructors (provided they have one) will be called after Pair's destructor.