gpt4 book ai didi

c++ - 为什么将 std::move(object) 和此对象的成员传递给函数会导致 SIGSEGV

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:27 27 4
gpt4 key购买 nike

<分区>

以下代码导致 SIGSEGV,我不明白这是为什么。

#include <iostream>
using namespace std;

struct C {
C(int x) { ptr = new int(x); }
C(C&& c) { ptr = c.ptr; c.ptr = nullptr; }

int* ptr;
};

void foo(int* x, C c) {
cout << *x << endl;
}

int main() {
C c(10);
foo(c.ptr, std::move(c));
return 0;
}

我希望指针 c.ptr 按值传递给函数 foo,但它的行为类似于按引用传递。

现在,如果我更改参数的顺序:void foo(C c, int* x),问题就会消失。另一种解决方案是在调用 x 之前创建 c.ptr 的本地拷贝,而不是将该本地拷贝传递给 foo。

我想明白为什么我不能在上面的示例代码中按值传递 c.ptr。

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