컴공 일기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를 선물하세요.
-
ㅈㄱㄴ
-
도와주세요 ㅠㅜ 3시간 수업 기준 문풀 어느정도 하나요
-
아침부터 오르비 해서 졸려서 잤는데 놓침
-
저게 왜 올라갔지..
-
성대 입학처 전화상담 해보니까 제 앞에 저보다 심한 탐구 비대칭이 ㅈㄴ 많아서 제...
-
물론 철저히 분석한 것도 있겠지만 그정도 점수대면 그 넓은 구간에서의 불합 표본이...
-
고연서성한중에 성대만 미어터짐
-
... 8시간 20분. 재수 확정까지
-
정신나가것다
-
하루에 12시간을 자도 불안한게 없다!!!!!
-
국장 1차 4
정시 재수생은 아직 소속대학이 없자나요 그럼 1차 국장은 신청 못하는거에요?...
-
30대후반 늙다리 설대 정성평가랑 면접 걍아웃인가요? 2
짬나는대로 하다가 8월부턴 휴직계내고 올인박아보려하는데 전공상 화2 생2 칠건데...
-
백분위 기준 얼마부터 사탐런이 옳다고 보시나요? 24수능 92(2) 74(3)...
-
내가 130일 리가....
-
정보통에게 들음 곧 나올듯
-
메가스터디 플래너처럼 날짜 적혀있는 플래너 있나요?
-
Old but gold 가 딱 맞는말인듯. 투애니원 진짜 오랜만이다.
-
(서울대 합격 / 합격자인증)(스누라이프) 서울대 25학번 단톡방을 소개합니다. 0
안녕하세요. 서울대 커뮤니티 SNULife 오픈챗 준비팀입니다. 서울대 25학번...
-
ㅈㄱㄴ
-
생1vs지1 4
안녕하세요 생1과 지1 비교해서, 1. 타임어택이 더 심한 과목 2....
-
한양대 인칼은 사실상 2학년될때 과 가고싶은데 선택할 수 있는데 어떤게 낫냐 (계약학과 제외)
-
ㅈㄱㄴ... 그냥 좀 간당하긴 해도 상경 쓸까
-
https://youtu.be/hD1qHGYU1J0?si=sHsTdSD9y7NX-AY...
-
기차지나간당 3
부지런행
-
7수생 기상 3
-
중~대형과 8칸 지금 기준 실지원자 2등인데 반영비 때문에 칸수 높은거긴한데 아무리...
-
ㅋㅋㅋㅋㅋㅋ이아십얼
-
난 입결 아예 모를 때도 약사가 꿈이었는데... 어차피 전망 안 좋은 거 입결 좀 내려주면 안 되나
-
18년도에 영어캠프가서 이거 처음 듣고 한동안 이 노래만 들었는데 벌써 7년이...
-
얼버기 10
-
개때잡 4
본인 중3때부터 생선님 강의 들었음 방학때 개때잡 완강하고 싶은데 3월 넘어서...
-
진심 개피곤함뇨……
-
나는 남자인데 서열정리때문에 학창시절내내 불가촉천민이었음
-
팔로잉 1009명 기준 471개의 글이 쓰였군요. 재밌게들 노셨네
-
77ㅓ억
-
이러면 대부분 어떰...? 빵날 가능성 높음?
-
얼버기 0
추워
-
현재 조정식 천일문 기본 - 괜찮아 - 워마 이천 끝냄 믿ㅇㅓ봐 절반정도 햇는데...
-
인서울 영문과 가고싶은 학생입니다 농어촌 안되는 시골 일반고입니다. 내신따기 쉬운...
-
슈냥님방송 이제 못보겠군
-
삼반수 1
부산대 전자에서 어느정도 해야 대기업 입사가능할까요 ? 삼반수해서 계약학과 목표로...
-
그냥 매일 취침시간이 1시간씩미뤄지는중임 어쩌다가 하루가 24시간인 이 행성에 잘못태어난건지
-
얼버기 3
라고하면 믿어줄래...?
-
또 비염이야 1
-
분명 점수 보면 더 높게 될 것 같은데 최초합 되는 학교만 3개 박아놓은 이 사람은...
-
얼버기 1
-
춤을 추지 않으면 우린 잠에 들 거에요 여래여래 못 말라리아 보살님
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요