sách gpt4 ai đã đi

Ngữ nghĩa di chuyển chi tiết

In lại 作者:太空宇宙 更新时间:2023-11-03 10:42:17 26 4
mua khóa gpt4 Nike

在下面的代码中,与 pm 对齐,该行是否会 move 整个内存并将其分配给 pm,或者它只会 move p 指向的内存而不是整个数组?

   int chính()
{
int* p{ new int[10]{0} };
int* pm{ move(p) };//WILL THIS LINE MOVE THE ENTIRE MEMORY ALLOCATED FOR p THAT IS ENTIRE ARRAY or only the memory p is pointing to?
trả về 0;
}

1 Câu trả lời

它将指针 P 复制到指针 pm ở giữa.

“move ”指针没有意义,因为:

  • 他们没有 move 构造函数
  • 他们没有 move 赋值运算符
  • 它们非常简单, move 它们没有任何好处

您对整个数组将以某种方式“move ”的期望也是没有意义的,因为:

  • 您已经只获得了相同数据的句柄,因此无处可移
  • int* 类型不知道其实例可能指向的数据

请记住,名字很糟糕的 std::move 实际上并没有 move 任何东西。它只是为您提供一个名称中的右值,否则该名称可能会被视为左值.

在这种情况下,区别是无关紧要的,所以就好像您根本没有写move.

move 语义对于间接管理内存的更大、更复杂的对象很有用,例如使用指针。您会期望此类类型的 move 构造函数或 move 赋值运算符交换指针。就抽象而言,这就是;这就是它的用处。

尝试将相同的逻辑应用于指针本身是没有任何意义的,除非是 unique_ptr 的情况,在这种情况下可以找到最纯粹的抽象形式,因为这样的对象是裸指针上的极薄包装。它仍然只是 move 的包装器。

最好的办法是将 P 复制到 pm 中,然后通过将其设置为某些不可用的方式任意使 P“无效”值(value)。同样,非常无用。

关于c++ - 详细 move 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33188885/

26 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com