gpt4 book ai didi

c++ - 唯一指针 xvalue 语义?为什么 lambda f2 的行为与 lambda f1 不同?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:02 24 4
gpt4 key购买 nike

我想澄清我对唯一指针 xvalue 参数的理解

这是我为学习 std::move 和唯一指针而编写的示例代码。谁能解释为什么 line2 崩溃但 line1 有效?在我的测试程序中,在 lambda f2 中移动有什么作用,为什么即使在 std::move 之后 line1 也能工作?这只是为了我的学习而不是作业问题,我是 C++14 和 C++11 的新手

#include <iostream>
#include <functional>
#include <memory>

void test()
{

std::unique_ptr<int> p (new int(278));
auto f1 = [](std::unique_ptr<int> i){std::cout << *i << std::endl;};
auto f2 = [](std::unique_ptr<int> &&i){std::cout << *i << std::endl;};

f2(std::move(p));
std::cout << *p << std::endl; //line 1

f1(std::move(p));
std::cout << *p << std::endl; //line 2
}

int main(int argc, const char * argv[]) {
test();
return 0;
}

最佳答案

第 1 行有效,因为 std::move 只是对右值引用的强制转换。实际转移所有权通常是通过移动构造函数或移动赋值运算符完成的,这两者都不在 f2 中。第 2 行崩溃,因为在 f1 中按值传递参数调用移动构造函数,之后 unique_ptr 为空。

关于c++ - 唯一指针 xvalue 语义?为什么 lambda f2 的行为与 lambda f1 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441078/

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