다음 코드 결과는 SIGSEGV이고 그 이유는 알 수 없습니다.왜이 개체의 std :: move (object) 및 멤버가 함수로 전달되는지 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을 전달할 수없는 이유를 알고 싶습니다.
당신은 임시로 이동 ... – user1810087