A move constructor is one which moves an object to a different location in memory, instead of copying it. For example, if an object is allocated on the stack but its lifetime needs to be longer than the current stack frame (e.g. if the function wants to return it, or pass it somewhere that wants to store it), it would need to be copied to the heap. This also means that pointers to the object's old location must be updated (or, typically, wiped); this is why C++ move constructor arguments are of type T&&
, because they need to know where the old pointer is stored so they can overwrite it, i.e. they need a pointer to a pointer. However, a problem arises if there is more than one pointer to the old location, because the move constructor will only fix one of them.
An intrusive linked list is one where the list elements themselves contain a pointer to the next item in the list, instead of having "list node" objects which each hold a list element plus a pointer to the next node. (This is done to save memory by reducing the number of different objects.) This isn't inherently more dangerous than a regular linked list, but it makes it more likely that some object can have multiple pointers to it, because the object serves two different purposes.
So, what this paragraph is saying is that you don't need move constructors in Rust, because the borrow checker will ensure that there won't be any remaining (usable) pointers to the old location of an object after it is moved. The mention of intrusive linked lists is merely an example of where this safety matters.