컴공 일기257
임시객체 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를 선물하세요.
-
고1 2 모의고사 국어 거의다 1 떴고 그읽그풀로 살짝 예측하면서 읽는 스타일인데...
-
최하위권에서 낑낑대면서 탈락만 면하려는데도 혼신의 힘을 다해 노력해야 하는 삶을...
-
지금 고대 교과우수 계속 보고있는데 경제를 쓰기엔 계속 4칸 고정이라 현재 5-6칸...
-
전 뭐 정시 쓸 것도 아니고 해서 아시는 분들만 인사해줘요
-
출항 20일 넘게 나가는 거 말고는 한 게 없는데
-
국제캠이랑 본캠이랑 입결 차이 나나요?
-
성균관대 합격생을 위한 노크선배 꿀팁 [성대25][율전 학생들을 위한 1학년 교양과목 추천] 0
대학커뮤니티 노크에서 선발한 성균관대 선배가 오르비에 있는 예비 성균관대학생,...
-
안좋은건가 흠..
-
정시 라인좀 0
어디까지가능?? 문이과 상관x
-
비문학 푸는데 0
지문 ㅈㄴ길고 5문제중에 2개 맞앗는데 먼 개소리인지 모르겠음뇨 이런지문은 어케...
-
지금 시발점 미적을 들으려고 메가패스 구매했긴 한데 김범준 선생님 수1수2 강의를...
-
관형사형 어미가 사실은 명사형 어미로 쓰이기도 했다는 사실 1
'-(으)ㄴ'이나 '-(으)ㄹ'은 관형사형 어미로도 쓰였지만 명사형 어미로도...
-
고대 문과 표본 1
지금 얼마나 비어있는 수준이에요? 모든과가 다그럼?
-
추합권은 +6인거니까.. 그럼 컷이 되게 안정적일텐데...
-
내신 3점대만 돼도 3학년 1학기 내신까진 한달전부터 준비해보길.. 이게 늦게...
-
새삼 얼마나 수학을 드럽게 못햇는지 체감시켜주네요
-
저랑 맞팔하실분 1
잡담태그 잘달아요
-
인강 조교 0
지원했는데 연락이 안 온다ㅠㅠ
-
언매미적화1경제할생각함 아무것도 모르고
-
전 첫 날부터 유지or상승인데 뭐 언제부터 진짜죠 이거..?
-
정시배치상담 0
양메기에서 정시배치상담 받고 왔는데 이거 믿을만 해요?
-
성대 서강대 2
서강대식 501.38 성대식 657.4 가군에는 안정으로 성대 자연계열 쓸건데...
-
조정식vs김지영 0
예비고3이고 영어고정 낮2인데 겨울방학에 조정식 믿어봐 문장 or 글 아니면 김지영...
-
제 친구 수능 언/확/생윤/사문 45354 인데 이번에 인서울 스나 통크게 한번...
-
한가요 아니면 6,9모나 사설 모고 성적이라도 내밀어야하나 간판도 사실 중경시...
-
슬프다 슬퍼 1
내가 딱 이정도 사람인거겟지.....
-
일본은 집게 사람마다 주는게 좋더라 캬캬
-
성대 공학계열 2
5칸 하위인데 표본 좀 봐야될까요 위에 3백명 넘게 있어서 한숨부터 나오는데...
-
걍 과바과인거 같은데 난 오름
-
지거국이긴해도 일단 붙었다는 안도감... 이제 전역해도 돌아갈 곳이 있따 이제...
-
경행인데 갑자기 칸수 올라서 뭐지 하고 봤는데 올해 예상 추합을 저따구로 잡음 ㅋㅋ...
-
내년 고3이 올해 고3보다 인원이 많다는 얘기가 있던데, 얼마정도나 많은지 아는 분...
-
대구한 추합 0
ㅆㅂ 이게 안붙노...
-
연대 상경계열 신설이라 너무 무서움..
-
정시로는 모집을 안하나요? ㅠㅠ
-
어디쓸까요 둘다 5칸임뇨
-
맞팔구 1
-
문과쪽..
-
냥대식 928 2
자리 있는걸까요..??
-
10모 기준 5등급 커트에 딱 걸린 예비 고3인데 정승제 이미지 둘중 누구 커리 타는게 나음?
-
수험 끝난 분들은 지금이 거의 가장 편한 시기임... 6
살면서 이런 시기는 앞으로 잘 없을 확률이 높음...
-
쪽지좀요..
-
갑자기 궁금해졌는데 보통 이러면 어디로 가는게 일반적인가요
-
대략 어느정도 인가요?
-
수능화학1 요약 1
으엑
-
지금 고대 계적이랑 한양대 기다리고 있는데 6시 지나면 아예 끝난건가요?
-
지금 열려있는 커리가 거의 없던데 재수생들은 보통 그때까지 뭐하나요?
-
문장 명료화는 제가 가르치는 모든 학생이 실천하고 있는 핵심 과정입니다. '문장...
-
어떻게 존재하는걸까... 웬만하면 3까지는 쉽게 올리던데 또 그 이상은 힘들어하는...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요