컴공 일기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인데
-
숭실 아주급이네 건동홍숙은 옛날말인가
-
연대 vs 고대 0
연대 국제학부 공대 vs 고대 생명대 국제학부 인식이 안좋다는데 진짜인가요?
-
시즌1부터 final까지요 도움 많이 받으신분 있나요?
-
아님 그 반대?
-
서강대 합격생을 위한 노크선배 꿀팁 [서강대 25][1학년 수강과목 설계 TIP] 0
대학커뮤니티 노크에서 선발한 서강대 선배가 오르비에 있는 예비 서강대생, 서대...
-
항공항운 최종컷보다 조금 높은데 써볼만한가요
-
아무리 생각해도 표본 너무 없는데
-
존잼 ㅋㅋ케
-
6시간30분 자는데 1시간만 줄여볼까요 아직은 깨있는 동안 졸리는 구간 없는데
-
아파트 어느 지역 가능해요? 잘 모름
-
나 이거 못 가면 진짜 울어..
-
수시 거의 안돈건가
-
고2->고3갈때 얼마나 떨어지나요? 이런 질문 ㄹㅇ 잘 받아줄 수 잇는데 현역...
-
화이팅
-
ㅇㅇ?
-
설학부 6칸 최초합 연경제 6칸 이러네 흠
-
의대 증원 500명이 생각보다 파워가 좀 있는거같음 한의대도 그렇고 악대도 그렇고...
-
알바할맛이안난다 0
혼자는 심심해..
-
장문)지방과학고 내신 6.7의 우주상향 과기원 도전 및 그 결과 0
결론부터 말하면 지스트를 6.7로 1차를 붙고 2차 예비떨이다. 하지만 최종등록한...
-
이번에 반수를 계획중이라서 아직 모르는 게 너무 많습니다. 반수를 하면서 본인이...
-
현타오네 7
대학 붙고 나면 학점따고 리트준비하고 로스쿨 들어가고 나면 또 변시에 변시 치고...
-
지금까지는 살짝 왔다갔다 하는데 다음주 넘어가면 아무래도 확 떨어지려나요.
-
성대 왜 이래 갑자기,,
-
이 씨발련이 8
-
7명이 갇혀있어요
-
고대기원26일차 1
-
추합으로 간 적이 훨씬 많은
-
범죄자되는거였노;;
-
제 성적에 5~6칸이 나오는 인서울 중 넣을만한 곳이 하나라 그걸 써야 하는데 면접...
-
히히 추합 망 3
충청도야 서울촌놈이 간다
-
아니 미적과탐 100 98 1 97 100 으로 고대 식자경 쓰는 놈은 뭐냐 2
심지어 성적 인증도 안함
-
요네즈는 갈건데 7
아이묭도 가야하나
-
아주대 높공이 7칸이 뜨는데 이게 사람 심리가 7칸은 뭔가 손해보면서 가는 느낌이라...
-
ㄱㄱ
-
유지 가보자고 5
파이팅 ㅜㅡㅜ
-
실력 인기빼고 딱 외모만
-
첨 과외인데 카페에서 하는줄..
-
고2 1등급에서 수능5등급은 심하다길래 어떻게 해야할지 질문 드립니다... 11
독서론 4.5분 화작 22분 이상 문학 25분 이상 (화작 문학은 정확히는 기억 안...
-
정시가 처음이라서 ㅁ치겠네요 ㅋㅋ 상위 지거국 6명 모집 소형과인데 2등으로...
-
이런게인생의낙이지
-
헬스완뇨 1
Pt쌤이 진짜 ㅈㄴ 빡세게 굴림 싸이코패스인줄 ㅠㅠㅠㅠㅠ 진짜 하..힘들군
-
경북대 물리학과 교과 입결보니까 3점중반대라고 되어있는데 본인 3.08 인데 3학년...
-
배 아파 0
졸리고
-
지금약간 0
이대로 가면 장학금 하나에 광탈 둘임 쓸데가없냐진짜
-
설학부가 칸수 더높네? > 설학부로 몰려감 어 자전아 더 높아졌네 > 자전으로...
-
미세스처럼 화정체육관 이러지말고 최소 잠실급 부탁드립니다 그렇다고 킨텍스 하진 마시고,,
-
성균관 컷 정상화 안하냐 이상하잖아 이거
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요