컴공 일기257
게시글 주소: https://w.orbi.kr/00070821481
임시객체 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를 선물하세요.
-
존잼 ㅋㅋ케
-
6시간30분 자는데 1시간만 줄여볼까요 아직은 깨있는 동안 졸리는 구간 없는데
-
아파트 어느 지역 가능해요? 잘 모름
-
나 이거 못 가면 진짜 울어..
-
수시 거의 안돈건가
-
고2->고3갈때 얼마나 떨어지나요? 이런 질문 ㄹㅇ 잘 받아줄 수 잇는데 현역...
-
화이팅
-
ㅇㅇ?
-
설학부 6칸 최초합 연경제 6칸 이러네 흠
-
의대 증원 500명이 생각보다 파워가 좀 있는거같음 한의대도 그렇고 악대도 그렇고...
-
알바할맛이안난다 0
혼자는 심심해..
-
장문)지방과학고 내신 6.7의 우주상향 과기원 도전 및 그 결과 0
결론부터 말하면 지스트를 6.7로 1차를 붙고 2차 예비떨이다. 하지만 최종등록한...
-
이번에 반수를 계획중이라서 아직 모르는 게 너무 많습니다. 반수를 하면서 본인이...
-
현타오네 6
대학 붙고 나면 학점따고 리트준비하고 로스쿨 들어가고 나면 또 변시에 변시 치고...
-
성대 왜 이래 갑자기,,
-
이 씨발련이 8
-
7명이 갇혀있어요
-
고대기원26일차 0
-
추합으로 간 적이 훨씬 많은
-
범죄자되는거였노;;
-
제 성적에 5~6칸이 나오는 인서울 중 넣을만한 곳이 하나라 그걸 써야 하는데 면접...
-
히히 추합 망 2
충청도야 서울촌놈이 간다
-
아니 미적과탐 100 98 1 97 100 으로 고대 식자경 쓰는 놈은 뭐냐 2
심지어 성적 인증도 안함
-
요네즈는 갈건데 5
아이묭도 가야하나
-
아주대 높공이 7칸이 뜨는데 이게 사람 심리가 7칸은 뭔가 손해보면서 가는 느낌이라...
-
ㄱㄱ
-
유지 가보자고 5
파이팅 ㅜㅡㅜ
-
실력 인기빼고 딱 외모만
-
첨 과외인데 카페에서 하는줄..
-
고2 1등급에서 수능5등급은 심하다길래 어떻게 해야할지 질문 드립니다... 9
독서론 4.5분 화작 22분 이상 문학 25분 이상 (화작 문학은 정확히는 기억 안...
-
정시가 처음이라서 ㅁ치겠네요 ㅋㅋ 상위 지거국 6명 모집 소형과인데 2등으로...
-
이런게인생의낙이지
-
헬스완뇨 1
Pt쌤이 진짜 ㅈㄴ 빡세게 굴림 싸이코패스인줄 ㅠㅠㅠㅠㅠ 진짜 하..힘들군
-
경북대 물리학과 교과 입결보니까 3점중반대라고 되어있는데 본인 3.08 인데 3학년...
-
배 아파 0
졸리고
-
지금약간 0
이대로 가면 장학금 하나에 광탈 둘임 쓸데가없냐진짜
-
설학부가 칸수 더높네? > 설학부로 몰려감 어 자전아 더 높아졌네 > 자전으로...
-
미세스처럼 화정체육관 이러지말고 최소 잠실급 부탁드립니다 그렇다고 킨텍스 하진 마시고,,
-
성균관 컷 정상화 안하냐 이상하잖아 이거
-
외계인이 갑자기 빔쏨
-
고2 9모가 23232 백분 90 86 생지로 87 89입니다나왔고 수학은 한번...
-
몇일전엔 5칸이었는데 현재는 4칸 극초반이네… 시팔진짜 무조건 쓸거긴한데….. 이제...
-
정시 원서 관련 질문드립니다! 제가 지금 20명정도 뽑는 문사철에서 최초합 맨...
-
뇌피셜임
-
이거 가능할까요??? 칸수가 확 밀려서 심란하네요
-
1월달 되면 가격 10만원 오른대서 19만원 다 바로는 못지르고 일단 3개월 할부..
-
현재 메디컬이랑 설공 중에 고민하는 중인데 고민하는 이유 중 하나가 내가 메디컬...
-
좀만 더 빨리 올것이지
-
작년에 핵펑크 났었고 사람들도 다 안좋은 말만 하시던데 만약 펑크 안난다면 대략...
-
뉴런 문제 풀때 2
뉴런에 있는 문제풀때 노트에다가 먼저 풀고 후에 강의 들으면서 책에다가 필기하시나요...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요