컴공 일기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를 선물하세요.
-
깨가 없네
-
탄핵 ㅈㄴ많이하긴했네
-
18년도에 영어캠프가서 이거 처음 듣고 한동안 이 노래만 들었는데 벌써 7년이...
-
얼버기 8
-
개때잡 1
본인 중3때부터 생선님 강의 들었음 방학때 개때잡 완강하고 싶은데 3월 넘어서...
-
진심 개피곤함뇨……
-
나는 남자인데 서열정리때문에 학창시절내내 불가촉천민이었음
-
팔로잉 1009명 기준 471개의 글이 쓰였군요. 재밌게들 노셨네
-
77ㅓ억
-
이러면 대부분 어떰...? 빵날 가능성 높음?
-
얼버기 0
추워
-
현재 조정식 천일문 기본 - 괜찮아 - 워마 이천 끝냄 믿ㅇㅓ봐 절반정도 햇는데...
-
인서울 영문과 가고싶은 학생입니다 농어촌 안되는 시골 일반고입니다. 내신따기 쉬운...
-
슈냥님방송 이제 못보겠군
-
도파민 디톡스 해보자
-
삼반수 1
부산대 전자에서 어느정도 해야 대기업 입사가능할까요 ? 삼반수해서 계약학과 목표로...
-
그냥 매일 취침시간이 1시간씩미뤄지는중임 어쩌다가 하루가 24시간인 이 행성에 잘못태어난건지
-
얼버기 3
라고하면 믿어줄래...?
-
또 비염이야 0
-
분명 점수 보면 더 높게 될 것 같은데 최초합 되는 학교만 3개 박아놓은 이 사람은...
-
얼버기 1
-
춤을 추지 않으면 우린 잠에 들 거에요 여래여래 못 말라리아 보살님
-
관리자님 3
차단한 사람이 보낸 쪽지 알림좀 없애주세요
-
새벽 얼굴 ㅇㅈ 1
-
ㅇㅂㄱ 2
-
수면브금 0
잘거에요
-
미디어학과에서 유튜브나 개인방송 관련된 것도 배우나여? 0
아니면 무적권 오리지날하게 지상파방송,PD,아나운서,기자 이쪽 분야만 배우나여?
-
조심해야겠
-
왜냐고? 공대를 열어둬도 사탐 잘봐서 대박나면 문과쪽으로 써서 대학 급을...
-
에휴다노
-
ㄹㅇㅋㅋ
-
결과 보는 낙으로 살았는데
-
몸 이완되는 느낌은 잇어도 잠은 죽어도 안 오던데
-
별차이는없네요
-
ㄹㅇ 찐 웩슬러 해보고 싶긴함 근데 돈이없음
-
처리속도 5
144~145계속나오네 억빠뭐지
-
한양대 전과 0
전과를 하려면 전과하는 학과의 선이수 과목을 수강해야하는 걸로 알고있습니다. 혹시...
-
https://cognitivemetrics.co/test/CAIT_DS 요거는...
-
두번 해봤는데 첫판 96 두번째판 128나옴 ㄷㄷ
-
저능아 틀딱은 자러감.. 삔또상함
-
이건 왤케 높게나오지...
-
https://cognitivemetrics.co/test/CAIT 병원에서 웩슬러 한거랑 똑같음
-
백분위 기준 확통 99 영어 1 한지 97 세지 98 일때, 대구한 문 닫고 갈...
-
진도 잘 나가네
-
유빈이 결국 잡혔네.. 15
유빈아카이브에서 다운 받고 나서 pdf나 한글로 저장한 후 인쇄하면 항상 엄청...
-
프세카 4일차 3
오늘 생애 첫 풀콤을 기록했다 엑스퍼트를 도전했지만 너무 어려워서 하드를 더...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..