My question is that if we want to move an object and inside that object the variable we want to move is not a pointer, how should we release the temporary value?
Should I assign the memory of the temporary variable to nullptr? (Which is not even possible)
Here is the code for better understanding
class Foo
{
public:
...
Foo(Foo&& other) noexcept
{
m_Value = other.m_Value;
/*
The bottom line will not work, so what should I do instead of this line of code?
*/
&other.m_Value = nullptr;
}
private:
int m_Value;
};
>Solution :
In your Foo
move constructor, you are trying to set the moved-from object’s m_Value
to nullptr
, which is not valid since m_Value
is not a pointer type. In fact, m_Value
is an int
type, which is a value type, meaning its value is stored directly inside the object.
In this case, you don’t need to release any memory because you are not dealing with pointers or dynamically allocated memory. When you move an object, the source object is typically left in a valid but unspecified state, which means you don’t need to worry about its internal state as long as it can be destroyed properly.
In your case, the default destructor will be sufficient to release any resources held by the Foo
object, and you don’t need to set other.m_Value
to any specific value.
Therefore, you can simply remove the line &other.m_Value = nullptr;
from your move constructor, and your code will be correct.