컴공 일기257
게시글 주소: https://ebsi.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를 선물하세요.
-
아무도없군 0
이제부터
-
도함수의 넓이는 원함수의 극값차 삼사차함수 비율관계 1:1:1:1 이랑 1:루트2...
-
이제 국어도 100점을 노려볼 수 있을까
-
진짜망했구나실감중
-
모 컨설턴트분 글이 좋다 싶어서 눈여겨보다가 요즘 입시철이라 바빠서 못들어왔는데...
-
내년은 좀 다를 거 같음
-
이젠 살짝 꼴릴정도임...
-
경희대>건대 12
대학갈드컵을시작한다
-
뭐냐이게ㅋㅋ7화 최악이노
-
표본이 촘촘해서 큰 빵은 잘 안난다고 들어서
-
먼가 3에서 2로 올리면 적백이 안나올거같음요 약대만 가면 진짜 만족할줄알았는데...
-
머리 나쁜 건 어케 할수 없는게 슬프다ㅜ 대학라인마저 올리는데 실패하면 열등감 괴물될듯... 힝잉
-
밥 먹고 싶다 2
제발 그만 좀 드세요! 적당히 좀 해. 씨름선수니?
-
다들잘자세요 1
ㅡ
-
엄빠 자서 멈췄는데 내일도 되겠지..?
-
정시 넣을 때 마지막으로 경쟁률 나오는게 한 시간 전이었나..?
-
실모풀기 좋은 도서관을 보유했습니다
-
돈이없노 2
하
-
피부 따갑고 가렵네
-
. . .
-
생지할까 0
나대지말고 사탐할까
-
알바 다 해봤는데 어떻게 쿠팡은 맨날 반려시키냐 하….
-
오늘은 어지러워서 이만 17
밥 좀 먹을걸
-
N제는 뭔가 시간 100분 딱 재고 30문제 풀 때의 짜릿함이 안 옴... 벌써부터...
-
그래서 예전에 다들 주기적으로 목욕탕에 갔었던
-
뱃지 따고 싶다 2
제발 3승...
-
사탐으로 뭐가 되나..
-
"나"를 배출했기 때문이죠
-
앙앙앙 울엇어
-
세종대 광운대 ㄱㄴ?
-
반수 질문 1
현역 언미물화 94 98 94 97 인데 반수하면 어느정도 까지 올릴수있을까요?...
-
성적이 안돼서
-
ㅇㅈ 10
배고파
-
오노추 6
일본 음악의 거장들의 과거에요
-
저도 들어봤는데 진짜 다르긴 하더라구요 일타들 수업이
-
남자의 처녀막은 단한번도 찢긴적이 없다.
-
이러면 뭐해야하노
-
제 지인 분 학교인데,,, 좀 대신 찾아봐주고 있는데 되게 애매하네요. 이 정도...
-
심심해죽겠네
-
저격합니다.. 2
빵야
-
세상이 단단히 잘못돌아가고있다
-
유트브나 봐야겟다
-
두 손을 사용하면 폰을 못 보는데 (실제로 한 생각)
-
오류 있을 수도 있는데 없을 수도 있습니다. 한 번씩 풀고 소감 좀 들려주고 가주세요.
-
https://orbi.kr/00024699094 성적상승 ㅁㅌㅊ
-
소확행 - 소비에트의 확장주의적 행보 현자타임 - 현실 자본주의 타격 임무 반모 -...
-
현역 연경 재수 설경
-
가정주부로 살면 안댈까..
-
노력하면 노력할수록 성격의 매력은 나락을 가네요 공감 못하게 태어난 건 내 잘못이 아니잖아요
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요