There are hundreds of things that various programmers think everyone should do, but not all are equally useful for a given class of projects and teams, and some are surely debatable. I've found the Table of Contents printed on http://www.gotw.ca/publications/c++cs.htm
] to be a useful basis for discussion. Whether or not you buy the book for the full explanations and rationales is your decision, but if you're inexperienced it might be a great help to understand programming techniques in-depth.
As to your questions:
1. Returning success or failure is a rather crude method of error propagation. In C++, the preferred method is throwing exceptions, in C it's returning an error code (i. e. an integral value indicating the cause of the problem, rather than just true or false). The former is not possible in C, but the latter can be used in C++ too, instead of using exceptions. Just make sure not to mix these two methods in any project.
2. In C++, the solution is to never use simple pointers, but "smart pointers" that keep track of whether the object they're pointing to is still being used or not. A smart pointer simply cannot be 0. (*ok, this is an over-simplification - see below!)
In C, you should always make sure that a pointer is not 0 before you use it, but unfortunately that doesn't prevent other parts of your program to mess with it and invalidate the data: checking for 0 is important, but not by itself sufficient to prevent run-time errors.
*P.S.: unlike C-pointers, smart pointers will know when the data they point to gets invalidated. So, while you still may need to check if they're valid, you can avoid run-time errors.
3. Returning a value copies the variable holding the return value inside the function to a new object of the same type. If creating a new object of this type and copying it's data is expensive, then returning by value is expensive; if not, then it isn't. If you are facing this problem, it may be better to let the calling function create the object containing the results, and pass a reference (or a pointer) to this object to the function.