컴공 일기257
게시글 주소: https://h.orbi.kr/00070821481
임시객체 Copy이슈로 오는 비효율을
Move semantics로 해결하곤 합니다.
단위를 객체로 보는 객체지향에서는, 이 임시객체에 대한 비효율을 처리해주어야 하는 로직이 따로 필요합니다.
왜냐… 임시객체는 말 그대로 임시적인 거라, 연산이 끝나면 곧 사라지기 마련인데, 사라질 애를 위해 Deep Copy를 한다는 건 메모리 낭비이기 때문이죠..
결국 임시객체는 Shallow Copy로 해결할 수 있고, 그것을 지원하는 문법이 Move semantics 입니다.
C++11에서부터 도입이 되었죠. 이 임시객체 문제를 해결하기 위해서요.
#include <iostream>
using namespace std;
class Test
{
public:
Test()
{
cout << "Test()" << endl;
pData = new int(0);
}
Test(const Test& rhs)
{
cout << "Test(const Test&)" << endl;
this->setData(rhs.getData());
}
Test(Test&& rhs) noexcept
{
cout << "Test(const Test&&)" << endl;
delete pData;
pData = rhs.pData; //shallow copy
rhs.pData = nullptr;
}
int setData(const int pnData)
{
if(pData != nullptr) delete pData;
//Deep copy
pData = new int(pnData);
return *pData;
}
int getData() const
{
return *pData;
}
Test& operator=(const Test& rhs)
{
cout << "operator=(Test&)" << endl;
setData(rhs.getData());
return *this;
}
//계속 사칙 연산이 가능하도록 해야하므로 반환값은 참조형
Test& operator=(Test&& rhs) noexcept
{
cout << "operator=(Test&&) - move" << endl;
delete pData;
pData = rhs.pData;
rhs.pData = nullptr;
return *this;
}
private:
int* pData = nullptr;
};
//임시객체를 의도적으로 생성하는 함수
//1. 연산 결과 2. 함수 반환값
Test getTestData(int param)
{
cout << "getTestData()" << endl;
Test test;
test.setData(param);
return test; //여기에서 이동 시맨틱이 호출된다.
}
int main()
{
cout << "*** Before ***" << endl;
Test t1 = getTestData(5); //컴파일러 최적화에 의해 이동생성자가 불리지 않음
Test t2(move(getTestData(10)));
Test result;
result = getTestData(23);
cout << “*** end ***” << endl;
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
조금이라도 비호감 살 짓은 안하니까 이미지는 좋아서 그냥 어느정도 얘기하고 가끔...
-
뭔데 6
니들 많이 서러웠어??
-
다 구해놓고 미지수 값이 안 나와서 환장하다가 코사인법칙 겨우겨우 찾아내서...
-
아주대 공대 수준 11
아주대 공대 인식 어떤가요? 국숭보다 아래인가요?
-
둘중 뭐가 더 낫죠?ㅜㅜㅜ
-
나중에 어떡할라고 30넘어가면 같이 밥먹고 술먹을 사람 잘 없음 ㅇㅇ
-
조금씩 보이는데… 모두가 빵을 예상하고 있어서 오히려 폭날 것 같음 좀 불안허네
-
허수 거른 건데 이러면 답 없나요…ㅠ
-
최초합을 정원보다 많이 잡는 경우는 무슨 경우임 ? 3
나중가면 앞 표본들이 안 쓸거라고 자체 판단하는건가
-
천원 정도 하는데 생각보다 양 많음
-
ㆍ
-
수학 원점수 어디까지 떨어졌을지 상상하기도 싫음 그나마 저게 보인 덕에 풀이...
-
146분 씹ㅋㅋ
-
저게 그정도로 쉬웠는지 모르겟어요
-
. 메이저리그 하위타선 급은 됨?
-
ㅈㄱㄴ
-
논술 미응시해도 합격처리되는 경우가 있을까요?? 성대의대/숙대약대/인하대의대 논술...
-
6 9 11 올해 다 2등급이었습니다 실수가 항상 1-2개 나와서 이것만 맞혔으면...
-
강대 기숙 0
강대 기숙 의대관 6평 국 수 영 70 96 2등급 7반 확정인가요??
-
ㅈㄱㄴ
-
살빼고 몸만들어서 알파남 되자
-
낙지 정상화 될까요...?
-
뭐가 그나마 더 어려웠음?
-
전 프랜차이즈가 한계임 아직까지... 반수하면서 대충 이런 로컬식당도 몇번 가보긴 함...
-
책장 정리 끝 2
강기본 독서랑 문학, 시발점 수1 끝내고 방바닥에 뿌려져있던거 싹 정리했습니당 아직...
-
어떤가요
-
벌점준다고 젖지한테 오는것같음..
-
아인 검정색은 진짜 못쓰겠어서 빨간색 샀는데 너무 잔찌끄레기들이 많이나옴… 최대한...
-
생1,생2를할수밖에없을거같아요 물,화는손대면안되고 지구는 개념강의갯수보고 바로후퇴해버려가지고요
-
동국대 컴퓨터ai학부 인문(컴공인듯) 최초합격 6칸 동국대 시스템반도체학부 2칸...
-
할바에 과탐함 진심으로 연도암기표 한번본적있는데 사람이 외울수가잇노.
-
치즈케이크도 포장해왔다 27900 + 13900 하지만 의미있는 소비였다... 앞...
-
없나요 ? 시골 느낌인가요? 어떤가요…..?
-
사문은 너무 밸붕인거같아서 다시함
-
지금이랑 비슷했나요? 유독 작년 대비 올해 진학사 관련해서 말이 많은것 같기도 해서......
-
서울대 << 이새끼 생기부 보는 기준 수시 1차랑 정시 모두 한치 앞도 모르겠음...
-
희대의 고대 10바퀴 추합 드가자
-
나는 여자에 관심많은 남자일 뿐임.
-
션티 키스타트 7
고2 학평 영어 다 1등급인데 들어야대나여? 얻어 갈 거 있을까용? 그냥 NF부터 시작해도 될까요?
-
껐니?
-
임신 5
배불룩
-
쉽다고평가받는 24생2 현장에서푸는데 7번 광합성 안풀려서 시간다씀 그뒤 제효 하디...
-
라식이나 충치 12
본인 돈으로 해본사람 있나요
-
과잠에 자기과 안 적힌 거 입고 다니는 애들도 많음? 7
낮과애들은 학과 자부심 없는 경우 많지 않나
-
굳이 커뮤니티까지 와서 하는짓이 애니프사 욕하기 말투 맘에 안든다고 욕하기 이런...
-
정시로 14명 뽑는 과고 실제지원자 27명중에 2등이고 전체지원자 100명중에...
-
ㅈㄱㄴ 아 그리고 요즘은 육군 운전병도 할만함? 우리 아빠가 육군 운전병이셨는데...
-
65명 뽑는 과인데 (실지원자 245명중) 제가 45등임... 새로생긴 전형이라...
-
영화 끝나서 들어왔는데 11
왜 애니프사 저격 메타임뇨... 메인에 무슨 일이 있던 거죠..
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요