컴공 일기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
오늘도 수고했다
-
https://www.instagram.com/reel/DDkA1aWIsTq/?igs...
-
엄… 2배수도 안찼네
-
그냥 대놓고 사탐하세요구나 저긴?
-
모르겠음
-
70명 뽑는 약대 6칸 추합뜨는데 이거 떨어질 수도 있을까요?
-
내 이상형 10
XX염색체보유자
-
수학강사.. 1
아직도 대성 인강 누구 들을지 못 정했는데 누가 더 좋을까요? 인강 커리는 한 분만...
-
말ㅁ디어줘 16
지낮니잔지나짜니진짜 안그럭게 한번만ㅁ봐줘
-
제가 바보라 못알아봐요 ㅋㅋㅋㅋㅋㅋㅎㅅㅎ
-
ㅇㅈ 4
그것은 청바지
-
이거 쓰려고 10일을 동굴속에서기다렸습니다진짜로… 원래 수시러였는데 정시를 수시보다...
-
어디가 더 합격예측 정확함?
-
하루에 공부 3시간은 해야 하는데 그게 안되네 오르비 하기에는 지겨운데 그럼에도...
-
좀 더러운 얘긴데 19
다들 겨울에도 겨땀 많이 남? 나 지금 홍수임 거의
-
코트입고싶은데.. 14
코트입고 혼밥은 진짜 에바야..
-
다들 굿밤 11
-
남자임..
-
다행이네 ㅋㅋㅋㅋㅋ
-
하기귀찮아서 걍상시접속했음
-
여친진자아니야 15
내 와구에 여친이 잇겟냐구 난 느 올붕이들박에 없어 사랑해
-
그런건없음
-
생1 생2 0
둘다 노베라는 가정 하에 최대표점, 서울대 목표로 하면 뭐가 나을까요?
-
탕후루 맛있게ㅛ다
-
김범준 스블 0
김범준 스블이랑 페이스 메이커 난이도는 전체적으로 어떤가요 그
-
24수능 1등급인데 25학년도6평3등급이였어...
-
기분이 좀 그래
-
대학생활 재밌게 즐기기 + 알바로 한달에 100정도 벌기 + 학점 상위권...
-
외대 가능?? 6
어문 다 상관없어요 이 성적으로는 과 상관없이 어디까지 갈 수 있나요? 교차도 괜찮아요
-
안녕올붕이들아 24
내가 진짜 ㅏㅁㄴ이많이 사랑하는거알지?? 항상 같이 잇어줘서 고마워
-
수능원점수 10
92 92 ? 48 37 ㅇ ㅏ.
-
거기 아파트 단지 음산한 분위기 내 취향임
-
심지어는 69 5050인데 수능3인 사람도 많이보임….
-
꿨음 ㅈㄴ무릎꿇고 기어다님 내가
-
ㅇㄷ감?
-
올해 수능원점수 15
나도 트렌드 따라간다 91 88 47 45 하 근데 초라하기 짝이 없네.....
-
2406 89 2409 92 2411 85 2506 100 2509 98 2511 97 언매입니다아
-
저런..... 시원하게 화작 86점 입갤 ㅋㅋ 1년만에 한거랑 연계 안한걸로 자위중 ㅋㅋ
-
역대 평가원 수학 점수 12
미적 2406 66 2409 73 2411 89 2506 96 2509 96...
-
수능때 1 나올줄 알았는데 69수 원점수가 89 91 91인데 9모때는 저게 3...
-
올해 수능 원점수 15
95 100 2 50 44 이렇게 보니까 존나잘봤네
-
2506 81점 백분위96 2509 88점 백분위91 2511 92점 백분위98
-
둘 중 하나 고르기 1. 경희대(합격확률 80%), 외대, 홍대 2....
-
올해 과탐 성적 변화 10
물/생 2506 48/50 2509 50/50 2511 42/40 아.
-
이거 정상임? 8
4수만에 목표를 이룰 수 있는 점수를 받았는데 걍 뭘 하든 즐겁지가 않고 공허함....
-
내가 제이스로 17데스 해도 1557은 안나오던데..
-
대체 뭐로 불타고 있는건지 모르겠네
-
깔수가없네 내신이라도 까야하나 저 이번 2학기 내신 수학 98임
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요