컴공 일기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를 선물하세요.
-
이정도면 호소해도 되나요??
-
겨우 나한테 여미새라고 한건가 억울하고 속상하네
-
부탁드립니다
-
대성이나 메가 등 선생님들이 내주시는 모고나 교재들 중 내신용으로 풀 만한 게...
-
특히 동법 너는 고소당하는 한이 있더라도 얼굴들고 학교 못다니게 해준다
-
저 신상털기 4
ㄹㅇ인지 나만 궁금함? 대체 어케 알 수 있는거지..?
-
정환샘 저격당했네 ㄷㄷ
-
겨울방학 수 1 / 2 김기현 아이디어 현강 + 써킷 숙제 수 1/ 2 기출생각집...
-
시대인재 변춘수 0
라이브로 듣는데요… 2주차 강의를 미루다가 오늘 놓쳐서 혹시 어떻게 들을 수 있는...
-
ㄱㄱ
-
격이 다르네
-
젖같네
-
젖지언제오냐 1
-
저는 1등급대나 2등급대나 크게 역량상 차이는없다고 봐서..둘다 교육과정을...
-
탈릅은 안해야겠다 무섭누
-
대학마다 다름?
-
살쪄서 죽고싶다 5
어케 사람이 고3도 아니고 고2 1년 동안 10kg가 찌지 방학 동안 식단조절해야하나 ㅠ
-
와 이 새끼들 멈추질 않냐
-
귀찮다
-
어떻게 한 명도 편을 안 들지
-
그냥 가벼운 욕같은게 전부는 아니지만 몇몇 말이 갑자기 창처럼 꽃히듯이 아픈데 이건...
-
운세앱 성대붙 걔임)여러분 합격운 언급 나왔긴하거든요 1
분명 연대가 오늘(1/13)에 발표하는 건 에바긴한데... 약속은 약속이니까......
-
저 분들 친하지 않았나 저건 다른 분인가
-
동국대도 거짓말일 확률 523퍼니깐 대충 또 WWE 거는구나 하면됨
-
이유1)국립은 국가이기때문에 국가간 분쟁위험이있다 이유2)국립 취지가 사립을 위해 희생하는게있다
-
좋은마음 = D컵 이상 11
왜 클릭?
-
ㅈㄱㄴ
-
저런년은 참교육을 당해야함.
-
계속 생각해봤는데, 제 모의고사 성적표를 까면서까지 제가 수학 1등급을 유지했다는...
-
개빡치는게 이상한거임?
-
까고 보니까 점수 대비 낮은 과를 쓴 게 아쉬운거지 학과 자체가 아쉬운 건 아닌 거...
-
에잉
-
아스날 잡고 올게요
-
후... 내가 참아야지
-
그럼 용서해줌
-
시대 단과를 들어라 재종이든(재종은 서바s인가 더 있다) 단과든 기본적으로 서바 +...
-
근데 진심으로 1
저거 글다 스샷 찍어서 신고하면 예비죄나 미수죄 성립되지않냐
-
감기옴팡 심하게 와서 이틀전에 큰 규모 통역 제대로 망친거 어떻게 수습하냐고......
-
'동기'는 대부분 다음과 같죠 대학이름 보고 사람들이 인정해줬으면 좋겠다. 나중에...
-
젖지 대머리~ 1
이러면 오겠지? 빨리와라 시간읎다
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요