我试图理解移动构造函数。
我在类的构造函数中分配内存并在析构函数中销毁它。
当我尝试移动班级时,我仍然有双倍免费。
#include <algorithm>
class TestClass
{
public:
TestClass() {a_ = new int[1];}
TestClass(TestClass const& other) = delete;
TestClass(TestClass && other) noexcept // = default;
{
this->a_ = std::move(other.a_);
}
~TestClass() {delete[] a_;}
private:
int* a_ = nullptr;
};
int main( int argc, char** argv )
{
TestClass t;
TestClass t2 = std::move(t);
}
为什么std::move
不更改为 nullptr other.a_
?
如果移动构造函数是默认的,我也会遇到同样的问题。
我发现了以下问题,但我仍然不知道为什么移动运算符不将源变量更改为默认值。