I have a class in my C++ code which has its own move constructor. A simplified version is shown here:
class myClass {
    //In this example, myClass must manually manage allocating
    //and freeing a memory buffer.
    char *mem;
    //...
    //Regular constructor, copy constructor, etc
    //...
    myClass(myClass &&other) {
        //Swap our memory pointer with other's memory pointer
        char *tmp = other.mem;
        other.mem = mem;
        mem = tmp;
    } 
    //...
    //Destructor, other member functions, etc.
    //...
}
In normal situations, this works fine. However, recently I needed to make a vector of these objects:
vector<myClass> v;
v.reserve(10); //Make space, but do not construct
v.push_back(myClass()); //Problem!
After getting a segfault and stepping through with gdb, I eventually discovered what should have been obvious: if you try to construct an object from an rvalue reference, this can result in using the move constructor on uninitialized memory.
How are you supposed to write a move constructor when it's possible that you're swapping garbage into the other class? Is there some way to detect this?
 
     
    