컴공 일기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를 선물하세요.
-
비틱말고 진짜 하위권인사람 ㅇㅇ
-
죄송합니다 예비고3이고 영어고정 낮2인데 겨울방학에 조정식 믿어봐 문장 or 글...
-
이멀전시 전형 0
난 모아니면 도다.
-
강사고르는기준 0
웃겨야함 그래서 이승모 김현우 임정환 이기상 들음 넷다 ㅈㄴ 웃김ㅋㅋ
-
이번에는 잘 할 수 있을지 자신이없네요 다들 화이팅
-
사실 창융디가 A로 과목들중에 제일 높습니다 여러분의 소중한 학점을 뺏어가서 죄송합니다
-
국개망 수잘 탐망 영어 1 자연계면 어느학교가 유리한가요?? 반영비!
-
지금 서성한-중경외시 라인 낙지 정상화 됐음? 다 말이 달라서 어떻게 할지 모르겠네...
-
0 0 0 ㅁㅌㅊ
-
하...
-
전 8칸 쓸꺼임 0
태국갔다왔어요.
-
일단 저도 태국 갈예정
-
작년엔 특히 그랬고 원래는 후했다가 짜게 변해갔는데 올해는 처음부터 짜다가 더더욱...
-
걍 답대가리가 없음 남들처럼 메디컬 sky도 아니고
-
행복하세요 2
-
인강쌤이나 학원쌤 과외쌤 등등 본인이 듣는 수업 선생님이 좋아서 그 과목 공부하는게...
-
이거 게이임? 586
-
무섭뇨….
-
추합까지
-
고1 2 모의고사 국어 거의다 1 떴고 그읽그풀로 살짝 예측하면서 읽는 스타일인데...
-
지금 고대 교과우수 계속 보고있는데 경제를 쓰기엔 계속 4칸 고정이라 현재 5-6칸...
-
전 뭐 정시 쓸 것도 아니고 해서 아시는 분들만 인사해줘요
-
출항 20일 넘게 나가는 거 말고는 한 게 없는데
-
국제캠이랑 본캠이랑 입결 차이 나나요? 누구는 인설 하위 누구는 서성한이라는대
-
성균관대 합격생을 위한 노크선배 꿀팁 [성대25][율전 학생들을 위한 1학년 교양과목 추천] 0
대학커뮤니티 노크에서 선발한 성균관대 선배가 오르비에 있는 예비 성균관대학생,...
-
안좋은건가 흠..
-
정시 라인좀 1
어디까지가능?? 문이과 상관x
-
지금 시발점 미적을 들으려고 메가패스 구매했긴 한데 김범준 선생님 수1수2 강의를...
-
관형사형 어미가 사실은 명사형 어미로 쓰이기도 했다는 사실 1
'-(으)ㄴ'이나 '-(으)ㄹ'은 관형사형 어미로도 쓰였지만 명사형 어미로도...
-
고대 문과 표본 1
지금 얼마나 비어있는 수준이에요? 모든과가 다그럼?
-
추합권은 +6인거니까.. 그럼 컷이 되게 안정적일텐데...
-
내신 3점대만 돼도 3학년 1학기 내신까진 한달전부터 준비해보길.. 이게 늦게...
-
새삼 얼마나 수학을 드럽게 못햇는지 체감시켜주네요
-
저랑 맞팔하실분 2
잡담태그 잘달아요
-
인강 조교 0
지원했는데 연락이 안 온다ㅠㅠ
-
언매미적화1경제할생각함 아무것도 모르고
-
전 첫 날부터 유지or상승인데 뭐 언제부터 진짜죠 이거..?
-
정시배치상담 0
양메기에서 정시배치상담 받고 왔는데 이거 믿을만 해요?
-
성대 서강대 3
서강대식 501.38 성대식 657.4 가군에는 안정으로 성대 자연계열 쓸건데...
-
제 친구 수능 언/확/생윤/사문 45354 인데 이번에 인서울 스나 통크게 한번...
-
한가요 아니면 6,9모나 사설 모고 성적이라도 내밀어야하나 간판도 사실 중경시...
-
슬프다 슬퍼 2
내가 딱 이정도 사람인거겟지.....
-
일본은 집게 사람마다 주는게 좋더라 캬캬
-
성대 공학계열 2
5칸 하위인데 표본 좀 봐야될까요 위에 3백명 넘게 있어서 한숨부터 나오는데...
-
걍 과바과인거 같은데 난 오름
-
지거국이긴해도 일단 붙었다는 안도감... 이제 전역해도 돌아갈 곳이 있따 이제...
-
경행인데 갑자기 칸수 올라서 뭐지 하고 봤는데 올해 예상 추합을 저따구로 잡음 ㅋㅋ...
-
내년 고3이 올해 고3보다 인원이 많다는 얘기가 있던데, 얼마정도나 많은지 아는 분...
-
대구한 추합 0
ㅆㅂ 이게 안붙노...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요