170강 유니크 포인터에대해 질문있습니다
17분 경 유니크 포인터 안의 리소스 포인터를 함수매개변수로 받아주는데 포인터로 받는것도 결국은 복사되는 것 아닌가요? 유니크 포인터가 아닌 포인터로 받아서 카피 시멘틱스가 작동해도 상관이 없는 건가요? 헷갈려서 질문드립니다.
Answer 1
0
안녕하세요? 질문&답변 도우미 durams입니다.
아마 아래 부분에 대해서 질문해주신 것 같습니다.
void doSomething2(Resource* res)
{
res->setAll(100);
res->print():
}말씀하신 대로 이런 식으로 작성하게되면 포인터가 복사됩니다. 위 함수가 작동하는 동안에는 '객체에 대한 소유권을 여러 곳에서 가진다' 라고 말할 수 있겠죠.
이는 강의에서 제시한 스마트 포인터 사용 시 함수에서 인자를 전달받을 수 있는 주요한 세 가지 방법 중 하나입니다.
std::move를 통해 함수에게 소유권을 주고, 다시 돌려받기l-value reference를 전달하여 함수 내에서 참조를 통해 작업하기
스마트 포인터 내 객체의 포인터를 직접적으로 전달하기
(위 코드)
1번의 경우 함수 동작에 따라 소유권을 주고 돌려받지 않을 수도 있습니다. 실제로 소유권이 여러 곳을 이동하는 경우 쓰면 좋겠죠.
2번은 소유권의 이동이 필요 없는 상태에서 해당 객체를 통해 작업하고 싶은 경우가 되겠습니다.
3번은 사실 권장되지 않는 방식이라고 말씀드리고 싶습니다. 엄격한 소유권 관리를 위해 std::unique_ptr을 도입을 하더라도 정작 함수에 raw pointer를 전달하면 std::unique_ptr가 관리하는 소유권과 별개로 객체에 접근 가능한 '비인가된 우회로'가 생기는 것과 같습니다. 그러니 잠재적인 문제가 발생할 수도 있는 방식입니다. 물론 문법적으로는 허용됩니다.
직접 사용해보시면서 일부러 문제를 발생시켜보는 것도 좋은 연습이 되실 듯 합니다.
교재 있나요?
1
127
2
11:11 부근에 Something::temp와 Something::getValue의 앞에 &를 붙이는 이유가 뭔가요? (함수 이름은 포인터(주소)가 아닌가요?)
1
85
3
using namespace std; 선언 후에 std::를 하는 이유가 궁금합니다
1
98
2
cstr직접구현
0
111
3
BubbleSort
1
75
2
숙제 마지막 부분
1
76
2
강의와 똑같이 진행했는데 링킹 에러가 발생합니다.
1
90
2
수업할때 레퍼런스로 사용하는 도서는 어떤 도서인가요??
1
158
2
공변반환형 관련 문의 드립니다.
1
88
2
섹션 5 퀴즈의 답이 이상합니다
1
82
2
이중포인터와 배열이 이해가 안됩니다.
1
151
2
5분 17~5분 34초 객체 잘림 질문
1
74
1
Resource.h 코드 알려주세요
1
70
1
char name[] 배열의 길이와 관련해 일부 궁금점이 생겨서 질문합니다
1
93
2
화면좌측 숫자 보이기
1
112
1
화면 좌측 숫자 보이기
0
65
1
처음 c++ 수강하려는데요. 비주얼스튜디오 2022 다운로드해서 설치하면 되는건가요??
1
134
3
46강 string 버퍼 질문입니다
1
79
2
프로그래머스 수열과 구간 쿼리 2 문제 질문입니다.
1
122
2
[] 범위 검사시 assert 사용 관련 질문
1
85
2
Lecture 클래스 멤버변수 명명 관련
0
86
2
프로그래머스의 대소문자 바꿔서 출력하기 문제를 푸는데요
0
67
1
noexcept과 throw()
1
78
2
explicit instantiation에 대해
1
60
2

