我了解如何移动物体,例如:
int a(5), b(6);
int c(std::move(a)); // move constructor
c = std::move(b); // move assignment
我了解自定义移动构造函数的常见实现(它获取动态指针的所有权并将移出指针设置为nullptr
.)
但我还没有发现任何有关移动动态分配的指针本身的信息。我需要确认以下代码是否合法:
int *p(new int(42));
int val(std::move(*p));
delete p; // I think this is no longer necessary. Is it?
那么,是否允许移动动态指针呢?
std::move
不移动任何东西。它只是将左值引用转换为右值引用。
在您给出的示例中,指针p
没有搬到任何地方。
顺便提一句。请不要处理原始指针 - 使用std::unique_ptr
反而。
这为 int 分配内存,将 int 初始化为值 42 并将该内存的地址存储在 p 中。
int *p(new int(42));
这会转换指向的 intp
to an int&&
然后构造 intval
来自该 r 值参考。由于 int 是整型,因此右值(即移动)的构造相当于副本(这是标准中规定的)
int val(std::move(*p));
是的,这个还是有必要的。
delete p;// i think this is no longer necessary. is it ?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)