Declare the default constructor. Even though a default is provided, it is a really, really good habit to get into.
Only if your type has a default state that makes sense and doesn't violate invariants.
For the next few, I suggest reading up on the Rule of Zero
Declare the copy constructor. It will save you later. I would also (maybe) suggest looking into the concept of "non copyable".
Incorrect. Classes that don't deal with resources don't need one (and can use the default). Classes that do deal with resources should ONLY deal with resources.
Non-copyable however is a very valuable technique
Declare the default destructor. Even though a default is provided, it is a life saving habit to get into.
See above - don't write one unless you're making a resource managing class.
Again, one (assignment operator) is provided, but quite honestly, this is a another life saving habit to get into when you are just starting out.
See above - don't write one unless you're making a resource managing class.
If you are aiming for well performing code I would recommend doing away with the use of std::string all together and using const char*. Supplying a const char* in the "create" function should also lead you onto topics such as "copy on write", which is something totally worth reading about: (But not until you know why you shouldn't have a function operator in a class declaration ).
http://en.wikipedia.org/wiki/Copy-on-write
Disagree. std::string is perfect for managing strings and is fast for what it does. New programmers should use it and should avoid const char* if possible. If you take strings as parameters into functions then the caller only has to make the string once and pass it in rather then the caller having a string, pulling the buffer out to make it a const char*, and then the parameter doing a whole new allocation to store it in a string again.
"Copy on write" is another very bad idiom that has been explicitly forbidden in the C++11 standard because it provides unpredictable performance problems and massive threading headaches.
Finally, anything done "for well performing code" should only be done after your profiler tells you what is slow. Make sure your code works and is maintainable first, using standard libraries and algorithms. Only when your profiling tools prove to you that it's too slow should you even remotely consider "tricks" or doing things by hand.