I've put some rather suggestive type aliases in there that we won't really take advantage of in C++11, but become much more useful in C++14. Be patient, we'll get there. Your question boils down to: We'll start with the move constructor. Note that the member has been made . Strictly speaking this isn't necessary for the move members, but I'm assuming you also want copy members. If that is not the case, there is no need to make the mutex . When constructing , you do not need to lock .