lvalue형태를 강제형변환해서 오른값 참조로 넘기는것
289
작성한 질문수 31
강의 내용에서 26분경 ~ 27분까지의 내용에서
Knight k3에
이동 대입 연산자를 통해 넘길때, 예시를 기존에 만들어진 l-value인 k2를 오른값 참조로 강제 형변환해서 넘기고 있는데,
사실 이 부분은 굉장히 위험한 코드가 아닌가 생각되어 질문 남깁니다. 오른값 참조의 정의 설명에 있다시피 넘기는 대상은 사용하고 버릴것을 의도하는데,
사실 원본은 l-value였던 k2가 매우 긴 실행 흐름을 가져서 오랫동안 해제되지 않는다면, 지역을 벗어나지 못한다면, 더 나아가 이러한 k2 같은 존재가 1개가 아니라 다수였다면,
쓸데없이 메모리를 차지하는 변수들이 매우 많이 남을것 같아서 메모리누수 문제가 발생하지 않을까 생각되어 질문을 남깁니다.
단순 이해를 돕기위한 예시로 k2를 드신건지, 실제로는 제 생각과 다르게 저런식의 l-value 형태의 객체들을 강제형변환으로 넘겨서 많이 사용하는지 궁금하네요.
저는 말씀드린것처럼 일단 오른값 참조의 경우는 넘어오는 대상은 한번쓰고 버릴 임시객체로 이해하고 그런식의 의도로 코딩을 할 것이고, 또 남의 코드도 그런식으로 이해하려고 하는데 이런 생각이 잘못된걸까요?
k2는 설명에서 나온것처럼 지역을 벗어나면 적절하게 해제되고 문제가 없겠지만, 저것이 지역을 벗어나기 전까지는 여전히 메모리에 남아서 쓸데없이 공간을 차지한다는것이 신경쓰였습니다.
심지어 이것이 매우 큰 배열 형태였으면 어떡하지, 라는 생각도 했구요.
내부 내용을 이동했다할지라도, k2에는 여전히 메모리에 차지하고 있는 변수들이 살아있기에 포인터 변수가 아니라 일반 멤버변수들을 프로그래머가 실수로 접근하여 사용하는 잘못도 발생할 수 있다고 생각했습니다.
즉, 사용하고 버릴거면 당장 그 명령어 라인에서 벗어나면 사라져버리는 임시객체처럼 해야하는데, k2와 같은 l-value를 억지로 오른값 참조로 넘기는게 너무 위험한 행위가 아닌가 생각되네요. 제 생각이 혹시 잘못된 부분이 있을까요?
답변 1
2
정말 문법적으로 임시객체'만' 되는게 아니라는걸 설명하기 위해 예시를 들어본 것일 뿐이고,
특수한 상황 (unique_ptr이라거나...)이나 필요에 의해 알고 하는게 아니라면
당연히 저렇게 멋대로 오른값 캐스팅을 하면 안 됩니다!
visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.
0
559
1
정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?
0
453
1
strcpy() 구현 관련 질문
0
535
1
빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?
0
475
1
클래스 타입의 포인터 질문합니다
0
559
1
입력값을 enum 값에 넣어주는거 이제 막혔나요?
0
503
1
템플릿 특수화 관련 질문
0
389
1
포인터 관련 질문합니다!
0
271
1
Unable to start assembler. Check your settings.
0
849
2
cpu선택
0
548
1
포인터 질문이 있습니다
0
331
1
20:35 에서 구조체 크기에 대한 질문입니다!
0
589
1
iterator 삭제관련
0
415
1
함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!
0
316
1
15 분 45초 대 질문
0
317
0
스택 프레임 질문합니다!
2
312
1
오른값 참조 in 게임
0
391
0
동적할당 질문이 있습니다
0
457
1
안녕하세요 메모리에 대해 질문드립니다.
0
312
1
함수객체 의 매개변수
0
365
1
복사생성자
0
439
1
main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요
0
430
1
포인터 실습 강의를 보고 궁금한게 있습니다.
0
359
1
스택 오버플로우
2
801
1





