Yeah, the code attachment doesn't work. It eats newlines and other forms of whitespace.
I can't really tell if you're asking a question, or passing along a tip

. Explicit destructor calls are allowed, and used in the STL among other places, but probably more often in the case that placement new is used to override memory allocation at construction.
This statement looks like it would cause a recursive call to the assignment operator:
*this = CFoo(f);
But I don't understand the semantics you're trying to achieve with your assignment operator in general. Assignment means a copying of value (state), just as with a copy constructor (which I used to implement by calling the assignment operator). You're destroying the existing object and then invoking the copy ctor to create a temp, followed by the (possibly recursive) call to the assignment operator. Why not just do a member-wise copy and deep-copy any pointers?