gpt4 book ai didi

c++ - 我应该从动态指针中删除一个 moved 吗

转载 作者:太空狗 更新时间:2023-10-29 21:16:06 25 4
gpt4 key购买 nike

我知道如何 move 一个物体,例如:

int a(5), b(6);
int c(std::move(a)); // move constructor
c = std::move(b); // move assignment

我了解自定义 move 构造函数的常见实现(它获取动态指针的所有权并将移出指针设置为 nullptr。)

但是我还没有发现任何关于 move 动态分配的指针本身的信息。我需要确认以下代码是合法的:

int *p(new int(42));
int val(std::move(*p));
delete p; // I think this is no longer necessary. Is it?

那么,是否允许 move 动态指针?

最佳答案

std::move 不 move 任何东西。它只是将左值引用转换为右值引用。

在您给出的示例中,指针 p 没有 move 到任何地方。

顺便说一句。请不要处理原始指针 - 请改用 std::unique_ptr

这为一个 int 分配内存,将 int 初始化为值 42 并将该内存的地址存储在 p 中。

int *p(new int(42));

这会将 p 指向的 int 转换为 int&&,然后从该右值引用构造 int val。由于 int 是整数类型,因此从 r 值构造(即 move )等同于拷贝(这是标准中强制要求的)

int val(std::move(*p));

是的,这个还是有必要的。

delete p;// i think this is no longer necessary. is it ?

关于c++ - 我应该从动态指针中删除一个 moved 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com