컴공 일기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를 선물하세요.
-
은테 8일컷
-
긍정적분#9999 이구요 1자리 남았읍니다..
-
ㅈㄱㄴ
-
모집인원 39 진학사 점공 등수 43 5칸 최종 합격 예상 컷 보다 0.71 점...
-
왜 마케팅이랑 축제 담당 동아리에 들어가서.. 왜 부스 운행 날 노가다를 뛰는가 ㅠㅠ
-
쇼츠 ㅈㄴ 나오네
-
입시관련 암것도 안해도됨?분석같은거나
-
로망임
-
https://orbi.kr/00034605480...
-
1. 현역 문과 국숭 라인 성적 받음 건동홍 가는 사람들이 너무 부러웠음 중경외시...
-
안됨? 현장가서 받아야되는거임?
-
21살에 이룬것 9
건대 오르비 금테 수능판 진짜 내년엔 떠나야겠다
-
5만덕 플리즈 0
-
못난놈은 얼굴만 봐도 즐겁다
-
뭉탱이 1
제곧내
-
너무 가오가 떨어짐 색이 너무 탁해서 덜멋져보여요 냥대 안정으로 쓸 가능성 높은...
-
비상경 전공 수업이랑, 상경 전공 수업 비율에서 상경을 얼마나 뽑을 수 있음?...
-
이병헌 잘생겼네 0
어떻게 늙어서도 저렇게 생겼냐 존나 부럽네
-
의대 가거나 인서울 좋은 학교간분들 한테 궁금한게 공부할때 다 야동보고 다 ㄸ치면서...
-
와이파이로 인강만 된다고 했던거로 기억하는데 시대라이브 가능한가요?
-
초교 입학을 만 나이로 세는데 입학을 3월초에 하잖음 예를 들어 2013년 3월...
-
예비고3이고 고2모고 3인데 워크북 필수인가요? 기억 잘 안나는 개념만 상기하고...
-
나도 메타 탑승할래
-
원래 애니만 봤는데 요새는 만화랑 라노벨도 재밌게 보는 중 뭔가 만화랑 라노벨에는...
-
흠뇽
-
5만덕만 주실분
-
목동시대 미적정규 강기원T 수업 대기 대략 얼마나걸리나요? 아직 대기는 아니고...
-
지수함수 그래프 활용 t_0 보이면 바로 반감기 1 3 ? 15 나오면 바로 ?=7...
-
국어땜에 재수하는디 1. 지문 쭉 읽고 다시 지문 안 보고 문풀하기 2. 답은...
-
화작 121 3 확통 104 5 영어 3 한지 67 1 사문 57 4 인데 충남대...
-
같은 학교인 분 중에 만나자고 하고 싶은 오르비언이 있는데 17
별로 그런 걸 원하지 않는 분 같아 거절당할 것 같아서 말도 꺼내지 못하고 있어요
-
의외의 사실 6
ㅇㅇㅈ
-
오르비팔로워204명
-
점수 아까워 ㅠㅠㅠㅠ 메디컬 못쓰는게 슬프다
-
없어진 거 아니었음? 신기하네
-
국어: 피램 전개 비문학+문학+언매수학: 미적 에센스+개코, 기코...후...
-
재수생이랑 검정고시생 니들은 쫌 나가라고 메디컬 목표인 애들도 나가 의대로 좀...
-
이노래좋다 0
걍 내 취향임
-
조금 더 행복한 고민을 했겠지
-
흠,,, ㅈ밥 대학 출신 ㅈ밥 사초생인데
-
그리핀때였나 한판 쳐맞고 나니까 울면서 역으로 우리 줘팼던거 그거 자꾸 생각나서...
-
나 고3때 11살이던 애도 의대 가는데 나는..
-
아오 6
아카
-
막 지금부터 지들끼리 친목질하고 그럼?
-
극 락 3
전자레인지에 데운 새우튀김을 케찹, 머스타드랑 같이 먹으니까 수능 이후 3번째로 행복해요
-
수학 한 문제가 서강대 젤낮과—>젤높과 차이쯤 됨? 4
한 문제 맞추면 몇 점 정도 올라가는거지
-
어느 대학이랑 비슷하지
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요