컴공 일기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를 선물하세요.
-
반수 3
과기대에서 시립대 중앙대 정도면 어느정도성공인가요
-
한 작년 겨울방학 쯤 부터 커서 뭘 해야 할지 어떻게 살아가야 할 지 또 이건 말이...
-
ㅇㅈ 1
풍경
-
잠은 다잤네..
-
등록금은 둘다 고려 X 개국할지 제약회사로 갈지 미정 단대 장점 -인프라 굿...
-
어른돼서도 정치적 중립을 떳떳하게 말할 수 있게 투표권 아예 실시 안하겠다고...
-
세종대에선 찐따처럼 살지말거라~~!
-
우리에게는 아직 존재하지 않는 미래 세대에 대한 도덕적 의무가 있는가? 여기서...
-
계속 비슷한글 싸는데 음지로 꺼졋 ! ㅋㅋ
-
같은 학교,학원다니는 애랑 학원가다가 주머니에 10원 동전 있는거 10원이면...
-
@sushimingham
-
이분 잘생김? 9
ㅇㅇ
-
잇올+단과로 생각중인데 단과는 수학만 할 예정입니다 단과는 어디가좋나요..??...
-
Midv -032 17
야밤의 품번추천
-
그럼 임시공휴일날 무시하고 그냥 발표하려나?
-
한석원의 1
-
지우가누구에요 3
?
-
자야징 7
ㅂ.ㅂ
-
4년?만인가 교사경+n제라 다들 양치기용으로 썼는데
-
ㅇㅇ?
-
10살때 일이었습니다. 피아노 학원 가기전에 아파트 단지에서 같이 놀던 여자애들이...
-
얼버기 9
갓생 8일차.
-
고대 통계 2
662는 가망 없을까요
-
與 "민주, 카톡 검열로 사상 통제"…野 "검열 아닌 가짜뉴스 대응" 8
與특위 '나도 고발해줘' 캠페인…전용기 "여당이 불법행위 부추겨" (서울=연합뉴스)...
-
재수준비하면 이제 못봐ㅜ
-
첫사랑 썰 풀까 2
재미없긴한데
-
그러면 만백 91정도 나왔을거같은데 차라리 ㄱ,랬으면 좋았을듯
-
샤머니즘 ㅋㅋㅋㅋㅋㅋㅋ (샤 머니 줌) 엌ㅋㅋㅋㅋㅋㅋㅋㅋ
-
뒷북이긴 한데 7
헬스터디라는 사례를 보고도 공부 한애들중에 10퍼가 의대라는말이 나오나 헬스터디,...
-
쵸비 4
쵸비랑사귀고싶음
-
Ag 6
Gays
-
난잘먹고잘살기에~~
-
카톡계엄하면 5
dm하면 되지 dm도 계엄하면 텔레그램이 국민메신저가 되는 상황이 올지도
-
진학사 점공 제 위 표본 1순위 지망은 안빠지는건가요? 0
70명 뽑는데 제 위 표본중 46명이 1순위 지망입니다.. 그러면 46명은 절대로...
-
지면 알지? 4
이겨라 아스날.
-
부엉부엉 1
부엉
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요