컴공 일기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를 선물하세요.
-
외대 경영 53명 뽑고 357명 들어왔고 81등입니다 이 카드는 안정으로 생각하고 쓰면 안되나요?
-
에휴이
-
나머지는 전부 4 3 2 1 점수가 아깝던데 ㄹㅇ
-
근데 결국 이원준선생님 수업내용 복붙일거야
-
근데 왜 치드는 6
없음? 의드는 꽤 많은데 법조 드라마도 많으면서
-
❗동국대학교 바이오시스템대학 광역화 신입생 카톡방 안내❗ 0
❗동국대학교 바이오시스템대학 광역화 신입생 카톡방 안내❗ 안녕하세요, 제17대...
-
한미녀입니다 감사합니다.
-
술먹다가돼지가되버림
-
최저 질문… 0
반수할 거여서 사탐,영어로 최저 맞추려고 하는데 1. 사문동사 2. 쌍사 뭐가 더...
-
나중에 후회할까요 교차지원이고 어문이 적성에 아예 안 맞진 않습니당
-
수능 0
51112 나오면 어디갈 수 있음? 과탐 물1, 물2
-
기계를 꼭가고싶은 사람입니다... 저 두개중에서 고민중인데 건대 기계가 전과가...
-
강사 있나요?? 어차피 연계 공부는 배경지식 쌓고 n제 푸는거니까 그냥 재미있는...
-
서강대 기준 500.95점 입니다 경영이나 경제가 진학사로 추합이 떠서 한 번...
-
ㅅㅂㅋㅋㅋㅋㅋ
-
오늘의 진학사 5
-
1kg 찌고 12시간 후에 역류성 식도염+심각한 중이염+장염 걸리고 1kg 빠지는...
-
몇 년 사이에 이렇게나 많이 올 줄이야
-
이제 군수하려는 학생입니다. 경희대 1학년다니다가 군대에 와서 군수하려합니다....
-
어쩔 수 없네 2
홍자전 인문 쓴다. 비록 3칸이지만.. 전과가 너무 빡셈ㅠㅠ 이거 되면 기적인듯
-
진학사 칸수 0
오늘 이후부터는 칸수가 의미있어지는 것 맞을까요? 가채점->실채점과 같은 대격변은 없겠ㅈ죠..?
-
러셀에서 주는 수학컨중에 아이젠 해보신 분들 계실까요 13
이거 좋나요
-
상남자 원서 ㅇㅈ 14
-
확통런 하려는데 한완수 한권만 사서 개념돌려도 되나요?
-
일단 25수능 수학 준비 안함 노베임 수시최저러여서 수학빼고 수능준비햇엇음 내신은...
-
스나포기. 6
자리없다
-
대치 다니고 싶은데? 수의대면 높반+장학되나요 장학 있으면 좋지만 높반 가고싶어서요...
-
기만하지마세요 8
그렇습니다.
-
히익 변태
-
2025 뉴런 0
패스 있으면 내년에도 2025 뉴런 들을수있음? 책은있음
-
아까 과탐런으로 어그로끌었다가 목적 달성에 실패해서 ㅇㅇ 수능치려는 게 아니라...
-
진학사 업뎃 0
갑자기 서울대 계산 불가 뜨는데 저만 이런건가요??
-
이분들 연애 성공해서 결혼까지 골인하신 분들임 ㄷㄷ
-
https://n.news.naver.com/article/025/0003410643...
-
함수를 두개로 나눠야 되는데 뭘로 나눠야될지 모르겠어요
-
이게 맞는거냐ㅋㄱㅋ
-
이거 경북대 공대 되나요? 정시는 문외한이라 대충 라인 잡아보고 합격예측...
-
* 수능이나 내신대비로 했던 과목들만 만들어 봄. [앞부분 줄거리] 사탐런 증가로...
-
아 머리아파 3
진학 그만볼래
-
모두 맛저하세용 6
넵
-
미대갈 생각 딱히 없는데 미대 과잠 예뻐서 입고다니면 좀 이상할려나 자전이라...
-
그렇다고 1.5배로 보기엔 맛이 안살아
-
피시방 존예 알바생이 어렸을 적 놀이터 메이트인 건에 대하여 5
ㅈㄴ 말 걸고 싶은데 날 기억할까
-
점공 0
안하는사람도 있나요 나중에 점공하면 정병걸릴거같은데
-
열품타방 오실분 0
https://link.yeolpumta.com/P3R5cGU9Z3JvdXBJbnZp...
-
정시 지거국 0
언매 미적 생윤 사문입니다 백분위로 49 68 32 71에 영어가 3나왔는데 지거국...
-
프사바꿈 4
-
ㅋㅋㅋㅋㅋㅋㅋ진짜개좋구나
-
부산 경북 목표로 군수중인데, 제가 본부중대라 야근이 많아서 평일날 아침,...
-
정시 아무데나 넣을까요 제일 낮은곳
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요