컴공 일기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를 선물하세요.
-
정시배치상담 0
양메기에서 정시배치상담 받고 왔는데 이거 믿을만 해요?
-
성대 서강대 0
서강대식 501.38 성대식 657.4 가군에는 안정으로 성대 자연계열 쓸건데...
-
조정식vs김지영 0
예비고3이고 영어고정 낮2인데 겨울방학에 조정식 믿어봐 문장 or 글 아니면 김지영...
-
제 친구 수능 언/확/생윤/사문 45354 인데 이번에 인서울 스나 통크게 한번...
-
한가요 아니면 6,9모나 사설 모고 성적이라도 내밀어야하나 간판도 사실 중경시...
-
슬프다 슬퍼 1
내가 딱 이정도 사람인거겟지.....
-
일본은 집게 사람마다 주는게 좋더라 캬캬
-
성대 공학계열 1
5칸 하위인데 표본 좀 봐야될까요 위에 3백명 넘게 있어서 한숨부터 나오는데...
-
걍 과바과인거 같은데 난 오름
-
지거국이긴해도 일단 붙었다는 안도감... 이제 전역해도 돌아갈 곳이 있따 이제...
-
경행인데 갑자기 칸수 올라서 뭐지 하고 봤는데 올해 예상 추합을 저따구로 잡음 ㅋㅋ...
-
내년 고3이 올해 고3보다 인원이 많다는 얘기가 있던데, 얼마정도나 많은지 아는 분...
-
대구한 추합 0
ㅆㅂ 이게 안붙노...
-
책 왔다 0
토익이랑 정처기 건실한 삶을 살겠어요
-
연대 상경계열 신설이라 너무 무서움..
-
정시로는 모집을 안하나요? ㅠㅠ
-
어디쓸까요 둘다 5칸임뇨
-
맞팔구 1
-
문과쪽..
-
냥대식 928 1
자리 있는걸까요..??
-
10모 기준 5등급 커트에 딱 걸린 예비 고3인데 정승제 이미지 둘중 누구 커리 타는게 나음?
-
수험 끝난 분들은 지금이 거의 가장 편한 시기임... 7
살면서 이런 시기는 앞으로 잘 없을 확률이 높음...
-
쪽지좀요..
-
갑자기 궁금해졌는데 보통 이러면 어디로 가는게 일반적인가요
-
중요한건맞는데 고1수학을 다 끝내고 수1,수2를 하는건 좀. . . . 기본적인...
-
대략 어느정도 인가요?
-
수능화학1 요약 1
으엑
-
지금 고대 계적이랑 한양대 기다리고 있는데 6시 지나면 아예 끝난건가요?
-
지금 열려있는 커리가 거의 없던데 재수생들은 보통 그때까지 뭐하나요?
-
문장 명료화는 제가 가르치는 모든 학생이 실천하고 있는 핵심 과정입니다. '문장...
-
어떻게 존재하는걸까... 웬만하면 3까지는 쉽게 올리던데 또 그 이상은 힘들어하는...
-
헌혈 끝 4
이제 고기먹으러 감요 맛저하세요!!
-
뭐뺄거임 님들은? 왜 나만 국어라고 생각하는거지
-
뭐 가져가셨어요????
-
ㅋㅋㅋ 괜히 도전했다가 점수 아작나면 가오잡는다 소리들을거같음 ㅋㅋㅋ
-
특히 사회탐구를 잘한다면 날먹이 가능 본인은 물론 탐구 5등급...
-
ㄹㅇ...좀아쉬움
-
설치해야 좋을까요? 큐브 마스터 알아보는 중인데 다른 게 기억이 잘 안나네요
-
인문임 죽어도 안될 점수냐... 스나이핑 가능함 ?
-
이 점수로 여길 왜 써!!! 혼란주지 말고 당장 나가!!!!!!!!
-
오겜 1화 0
ㅈㄴ 재밌다
-
이상하게 현실에서도 틀딱 취급받고 커뮤에서도 그러네 따흐흑
-
1합 1이면 과탐 vs 국어 머 선택함? 수학이랑 영어는 너무 쉬우니까 패스
-
모평이든 수능이든 독서 문학 다 모든 선지 읽었어요 그래야 마음이 편함
-
기구하다
-
설자전 1
컷 좀 낮은거 아닐까요? 폭날거같은느낌인데
-
초가공식품 끊기 0
밥좀 깨끗한거 먹자
-
언미물지인듯 ㄹㅇ
-
엔탈피 감 잡아버렸어 ㅋㅋㅋ
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요