ok, you probably don't want to hear this, but the only way to give you a chance to make progress on this is to break it down into smaller pieces
1. write unit-test/test drivers to test as small of piece of your program at a time. even if that means just instantiating an automatic variable and letting it fall out of scope
2. run valgrind on your test program (or your favorite memory testing program)
http://valgrind.org/
3. if it passes, add another test that covers a little bit more and goto 2
4. if it doesn't pass, debug, using a debugger if needed, and fix before you go on
in particular, for C++, I recommend checking your assignment operators and copy-constructors, keeping in mind that they could be automagically defined by the compiler for you
also, I would avoid added boost's smart pointers, for now - this will likely just add complexity to your debugging without solving your problems
simplify, divide, and debug