我正在研究 C++ 中的移动构造函数,它接收对类类型的 r 值的引用。
问题是,尽管查看了几本 C++ Deitel 书籍和其他几本,但我完全没有发现关于 move 构造函数的信息,我只有几张幻灯片上的信息并没有清楚地解释它。
有什么方法可以帮助我了解如何找到一些信息来学习 C++ 中的移动构造函数?
即使在谷歌中,我也没有发现任何有趣的东西来学习所说的构造函数。
我会尝试更具体一些,你看,这将是关于 C++11 中的移动构造函数。也就是说:
class C
{
public:
C(C&& c) {...}
//...
}
我知道当一个对象使用对 r-value 的引用进行初始化时,它会被隐式调用,r-value 是同一类的另一个对象。
然后在我拥有的“少量”信息中,暴露了一个没有对象移动的向量类(带有复制构造函数、析构函数和赋值运算符)。
在示例中,我还得到了一个运动构造函数、运动分配和其他一些东西,我不知道这是否有助于你帮助我。在这里,我将为您提供有关示例提供给我的构造函数的更多信息:
移动生成器:
Vector(Vector&& v);
定义:
//Ctor de movimiento
Vector::Vector(Vector&& v): eltos{v.eltos}, n_eltos{v.n_eltos}
{
v.eltos = nullptr; //Tras el movimiento se invoca
v.n_eltos = 0; // al destructor de v.
}
另一个动作任务:
Vector& Vector::operator= (Vector&& v) //Parametro no const
{
delete[] eltos;
eltos = v.eltos;
n_eltos = v.n_eltos;
v.eltos = nullptr; //Tras el movimiento se invocará
v.n_eltos = 0; //al destructor de v
return *this;
}
以前的参考资料:
什么是移动构造函数?
移动构造函数随 C++11 标准一起发布。这个构造函数是移动语法的一部分,它大致由移动构造函数和一个新的赋值运算符组成:
它是如何工作的?
目标是避免不必要地
sintaxis move
复制大量信息。这基本上是通过移动指针而不是移动其中包含的信息来实现的:如您所见,调用复制构造函数涉及分配内存并将数据从一个实例复制到另一个实例......而移动方法专用于移动指针(快得多)。
移动语法的副作用是原始对象在操作后为空或不可用。注意内部数据是如何
obj
在移动构造函数中重置的。这就是为什么移动语法只有在不再需要原始对象时才有意义。那么赋值运算符呢?
赋值运算符类似于构造函数,但有一个根本区别......我们将修改一个已经存在的对象而不是创建一个新的对象,这迫使我们采取某些预防措施,例如在专注于自己之前清理内部内存移动指针:
如何调用移动语法?
这已经在我作为参考的第一个链接中进行了解释......我建议阅读它以了解该主题。
移动语法是我所有问题的解决方案吗?
不开玩笑。移动语法既不完美,也不能始终应用......如果您有不使用动态内存的对象,您将不会获得任何好处。此外,对这种语法进行编程会为项目添加更多代码......然后必须维护和测试代码......
完美转发
这将是评论该主题时缺少的最后一个细节,因为没有它,移动语法是蹩脚的,并且可能是导致理解起来有点复杂的错误来源。
您可以在此其他线程中找到有关它的信息