Neither is good. If you have any pointer or reference member variable pointing at something allocated outside your class, it most likely means that the program design is flawed somehow.
One case I can come up with where it is justified, is when you have some sort of peculiar, external garbage collector functionality. (For example C++ Builder's automatic allocation/deallocation of VCL components on the heap.)
Another case is where it could be valid, is when you are emulating a C struct with a C++ class, or when writing a private class inside another class.
But then most likely, the need to point at something outside the class comes from flawed program design. I would think twice of why my code needs to do this, and at the very least try to add as much const correctness at possible to the pointer, ie const *c2 const obj;
If you have peculiar member pointers like this, you must also most likely manually write a copy constructor, assignment operator and destructor for your class.
Edit: The rationale for why this is bad practice is the concept called private encapsulation, which is one of the cornerstones of the program design concept called object-oriented design.