컴공 일기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를 선물하세요.
-
정시로는 모집을 안하나요? ㅠㅠ
-
어디쓸까요 둘다 5칸임뇨
-
맞팔구 0
-
문과쪽..
-
냥대식 928 0
자리 있는걸까요..??
-
10모 기준 5등급 커트에 딱 걸린 예비 고3인데 정승제 이미지 둘중 누구 커리 타는게 나음?
-
수험 끝난 분들은 지금이 거의 가장 편한 시기임... 4
살면서 이런 시기는 앞으로 잘 없을 확률이 높음...
-
쪽지좀요..
-
갑자기 궁금해졌는데 보통 이러면 어디로 가는게 일반적인가요
-
중요한건맞는데 고1수학을 다 끝내고 수1,수2를 하는건 좀. . . . 기본적인...
-
대략 어느정도 인가요?
-
수능화학1 요약 1
으엑
-
지금 고대 계적이랑 한양대 기다리고 있는데 6시 지나면 아예 끝난건가요?
-
지금 열려있는 커리가 거의 없던데 재수생들은 보통 그때까지 뭐하나요?
-
문장 명료화는 제가 가르치는 모든 학생이 실천하고 있는 핵심 과정입니다. '문장...
-
어떻게 존재하는걸까... 웬만하면 3까지는 쉽게 올리던데 또 그 이상은 힘들어하는...
-
헌혈 끝 4
이제 고기먹으러 감요 맛저하세요!!
-
뭐뺄거임 님들은? 왜 나만 국어라고 생각하는거지
-
뭐 가져가셨어요????
-
ㅋㅋㅋ 괜히 도전했다가 점수 아작나면 가오잡는다 소리들을거같음 ㅋㅋㅋ
-
특히 사회탐구를 잘한다면 날먹이 가능 본인은 물론 탐구 5등급...
-
ㄹㅇ...좀아쉬움
-
설치해야 좋을까요? 큐브 마스터 알아보는 중인데 다른 게 기억이 잘 안나네요
-
인문임 죽어도 안될 점수냐... 스나이핑 가능함 ?
-
이 점수로 여길 왜 써!!! 혼란주지 말고 당장 나가!!!!!!!!
-
오겜 1화 0
ㅈㄴ 재밌다
-
이상하게 현실에서도 틀딱 취급받고 커뮤에서도 그러네 따흐흑
-
1합 1이면 과탐 vs 국어 머 선택함? 수학이랑 영어는 너무 쉬우니까 패스
-
모평이든 수능이든 독서 문학 다 모든 선지 읽었어요 그래야 마음이 편함
-
기구하다
-
설자전 0
컷 좀 낮은거 아닐까요? 폭날거같은느낌인데
-
초가공식품 끊기 0
밥좀 깨끗한거 먹자
-
언미물지인듯 ㄹㅇ
-
엔탈피 감 잡아버렸어 ㅋㅋㅋ
-
성균관대 가장 낮과는 사범대인가요? 성대 사회학과랑 경영학과 입결 차이가 큰가요?...
-
그 한국사로 크리티컬하게 까는 대학이 몇 개 있어서 하…
-
공통 기출 2회독 피드백까지 확실히 하고 N티켓 시즌 1,2 2권 풀면 3모 확통...
-
몸살인 듯
-
뭔 5~6칸 이였던것들이 3~4칸 되니까 속이 답답해짐
-
첫달 수수료가 한 학생당인가여 아님 평생에 한번인가요
-
컷이 왜 계속 올라오나요 경험상 다음주에 계속 오를텐데
-
지들도 진학사 칸수 봤으면 국숭숙, 경이시외인거 알텐데, 입학만 하면 건동홍숙...
-
설연카라고 의대 3대장이라고 하던데 또 의대는 설연의 or not이라고도 하던데
-
이월 한명도 안되는 경우 많은가요? 중앙시립입니다
-
학교다님 06임
-
내일은책읽을거임 0
사막을건너는법 서울1964년겨울 읽을것임 그리고화학공부좀할거임
-
이번에 당할 뻔했군. 한번만 살려주지.
-
일본어 하면 고정1인데
-
숭실 아주급이네 건동홍숙은 옛날말인가
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요