DogDog &&dg 移动构造函数 cout move construct endl; m_value = dgm_value; m_ptr = dgm_ptr; dgm_ptr = nullptr; 详细解释每一行用中文
Dog(Dog &&dg) { //移动构造函数 cout << "move construct" << endl; m_value = dg.m_value; //将右值引用的对象的成员变量m_value赋值给当前对象的m_value m_ptr = dg.m_ptr; //将右值引用的对象的成员变量m_ptr赋值给当前对象的m_ptr dg.m_ptr = nullptr; //将右值引用的对象的成员变量m_ptr置空,防止析构时重复delete指针 }
每一行的详细解释如下:
- Dog(Dog &&dg):这是移动构造函数的函数头,表示接收一个右值引用(rvalue reference)dg作为参数,用于构造新的对象。
- cout << "move construct" << endl;:输出移动构造函数被调用的提示信息,用于调试和验证。
- m_value = dg.m_value;:将右值引用的对象的成员变量m_value赋值给当前对象的m_value。
- m_ptr = dg.m_ptr;:将右值引用的对象的成员变量m_ptr赋值给当前对象的m_ptr。
- dg.m_ptr = nullptr;:将右值引用的对象的成员变量m_ptr置空,防止析构时重复delete指针。这是因为移动构造函数的目的是将原对象的资源转移给新对象,避免资源的重复释放。
- }:移动构造函数的结束标志。
移动构造函数通常用于实现资源的高效转移和管理,提高代码性能。在移动构造函数中,可以通过直接复制成员变量的值来实现资源的转移,而不需要进行深拷贝。移动构造函数使用右值引用作为参数,表示该函数接收的参数是一个临时对象或将要被销毁的对象,可以对其进行资源的转移,而不是进行资源的复制
原文地址: https://www.cveoy.top/t/topic/iJyc 著作权归作者所有。请勿转载和采集!