컴공 일기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를 선물하세요.
-
김범준 스블 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임
-
고등학생 때는 이 나이에도 수능을 보게 되리라고는 상상한 적 없었는데.. 정시...
-
2406 100 2409 95 2411 100 2506 100 2509 100...
-
우리엄마도 여선생 선호하던데 난 남자쌤이랑 했었음.. ㄹㅇ성별이 뭐가 중요한지...
-
고3때 인스타 9
ㅡ3ㅡ
-
백분위 기준 2406 83 2409 79 2411 91 2506 88 2509 90...
-
이걸 ㅅㅂ 어케써
-
대형과 추합 0
당연히 학교마다, 과마다 다르겠지만 최초합 200,300명까지 뽑는 학과에서도...
-
홍대 5칸 0
낼부터 더 떨어지려나요... ㅜ 괜찮겠죠? 그리고 다군 올해 많이 생겼던데 추합률...
-
지금 밖이었으면 5
옯스타 라이브 켜서 노래 불렀겠지?? 올해 1월에 그랬거든
-
소수과 대형과 5
기준좀 20-30사이면 어느정도임?
-
화학 하지 말걸 2
하지말라할때하지말걸
-
내 평가원 수학 성적 18
원점수기준 2406 88 2409 78 2411 84 2506 100 2509 92...
-
한국어시험 ㅇㅈ 4
4급 겨우맞췄네요,,,,,
-
- 6
-
-
ㅇㄱㄹㅇ
-
진학사 정시예측과 관련하여 질문이 있습니다 예를 들어 최초 정시모집인원이...
-
다들보툥 2
몇시에 주무세여 잠이 요새 너무안와서 늦게까지 눈뜨고있다가 겨우잠듦
-
사실상 선언한거같은데
-
아니면 상태 안 좋은? 사람들만 하나요?
-
3만원이 아깝긴하다만
-
집에 있는 소주는 다 내가 마싱 거임 ㅇㅇ 아버지 다음으로 내가 제잏 잘 마셔~
-
사진은 순서대로 독서 수2 영어 물리 지구 인데 이정도면 학교 수준 좋은건가요??...
-
내가 지금 나이가 27이고 21살부터 23까지 해외 어학연수 갔다오고 24살에...
-
고려할 것 중요 기출이 다 수록되어있는가?(선별이 잘 되어있는가?) 문제 양이...
-
내 평가원 국어 성적 17
2406 89 2409 93 2411 78 2506 91 2509 93 2511...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요