컴공 일기257
게시글 주소: https://h.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를 선물하세요.
-
이거 정상임? 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...
-
얼굴 ㅇㅈ 12
프사 본인임뇨 냥냥
-
인사팀 입사자 교육중 촬영자료
-
나 좀 불쌍한데 16
술 마셔야 원래 텐션 나오는 거 뭐냐 진짜 이게 맞나 그 촐랑대던 내가 맞냐??...
-
메인글 대체 다 무슨일이야
-
무물보 받습니다 7
처음이자 마지막일듯 신상정보 빼고 다 말해드림
-
한국어능력시험 8
수능국어는 평소 4등급, 25수능 3등급 나왔는데 얼마정도 나올까요 설마 무급은 안 뜨겠죠???
-
부산대식으로 677.xxx면 가나군 중에 하나는 꼭 붙어야 하는 상황에서 가나 둘...
-
https://link.yeolpumta.com/P3R5cGU9Z3JvdXBJbnZp...
-
비메디컬 기준
-
가채점 2 나온 거 보고 너무 오만했나 싶었음... 근데 가채점을 밀려쓴 거였어서 1 나옴
-
용기좀 주실분 7
일단 성적글 재탕 ㅈㅅ전형적인 수능 망 케이스고 수시라 여기다가 과탐은 올해는...
-
문과기준으로요! 부산대 경영이랑 외대 어문이면 올라가시나요?
-
제 실물 딱 묘사해드림 17
프사 본인임뇨
-
지금 가입해도 되요? 너무 설레발인가
-
한번해봐?
-
아이폰 15가 운명할 뻔함... 미끄러져쎄 내 탄탄한 허벅지로 잡았다 ㄹㅇ
-
원서황님들 소수과 원서 진학사 한 번만 봐주세요..ㅠ 4
올해 꼭 가야합니다ㅠㅠㅠㅠ 정시 원서 처음이라서 잘 몰라요ㅠ 한 번만 봐주시면...
-
아가 취침 16
모두 굿밤
-
일차변환, 유체역학 같이 예전 교과에는 있었다가 현재는 빠진 내용들에 대해 간단하고...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요