컴공 일기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학기나 1년정도 더 대학 다니나요??
-
2시간 반 가까이 통역화상모임&복습중 ㅋㅋㅋ
-
댓글 좀 적어주세요 학자금 관련 질문이 있어서요
-
흐흐흐 3
널보고잇잖라
-
의공학과 전망 5
건양대, 울산대, 을지대 이정도 의공학과를 가려고 하는데 의공학과 전망이 좋나요?
-
운동못해서 울었러…. 마지막이 나임여 헿
-
거의 들어올때마다 새로 로그인하는거같은데
-
1명 차단함 19
-
어디가 취업은 더잘함? 고시류 제외
-
예비고3 내신은 2초반이고 학종최저 노리려는데 사탐 상관없대서 사탐 하려고요...
-
점공 계정삭제 0
점공했던 사람이 사라지고 계정이 삭제됐다는데 왜 이런건지 아시는분…
-
1지망 떨어지면 가게 될 거 같은데 그냥 다녀도 될지 고민중 현역임.
-
건축심의 통과 했고 내년 착공, 28년 7월 준공 예정 이네요. 25년 신입생이면,...
-
ㄹㅇ혼자되기 딱좋은 과인거같은데
-
오르비에서 메가로 이적한거보고 그릿 새로 나왔겠지 하고 구매함 근데 3년전 거랑...
-
사탐 최저 0
고2 때 물리 1 2학기 전교 1등 찍었는데 그냥 드랍하고 사탐런하는게 답인가요?...
-
동국대 합격생을 위한 노크선배 꿀팁 [동국대 25][동국대학교 학생들은 여기서 마신다] 1
대학커뮤니티 노크에서 선발한 동국대 선배가 오르비에 있는 예비 동국대생, 동대...
-
현역일때 국어 15
현역 수학1도 대단하고 멋있긴 한데 현역 국어1은 진심으로 부러움 뭔가 시작이 다른 느낌이랄까
-
십년들아
-
https://orbi.kr/00037631624 제본은 여기서 안내에 따라...
-
[WHY?] 0
왜 왜라고 묻는가 궁금해서 왜 궁금한가 원리를 알고싶어서 왜 원리를 알고싶은가 그럼...
-
학비 더 올리면 어후...내 사촌 성대 글경인데 장학금 못받았는데 벌써부터 만약...
-
AMF 만들 수 있음
-
요즘 발목이 아파서 안돼네요…
-
가나다군 순서 상관없이 457
-
제가 싫어하는 질문이지만 가능충 질문 한 번만.. 12
24수능은 98 70 2 84 91이었고 25 6평 98 86 2 100 98 25...
-
전형갈드컵 여론조사 15
ㄱㄱ혓 댓은 달지 마세요 근데 달고싶으면 다셔도됨
-
한 번도 의심한 적 없었죠 몰랐어요 난 내가 저능아란 것을 그래도 괜찮아 성대 붙었으니까ㅏ...
-
미미미누가 왜 5수냐 10
군대포함이니까 삼수아니냐?
-
연대 중간공 안정넣고 성대 안전빵 걸어놨는데 점공보니까 연대 전컴도 다 뚫렸을 것...
-
개인적으로 비호감상 32
초면에 반말.
-
합격증 나오면 그때는 잠깐 왔다가 쭉 휴릅할듯요… 탈릅은.. 좀 더 생각해보고…
-
빅뱅이 시작된 것도 지구가 생명체가 살 수 있는 환경이 조성된 것도 최초의 생명체가...
-
경기권이라 입결 낮아서 42356으로 지반공을 들어갔다느니 인서울 아니라서 명지대...
-
“시발 그래야 돼”
-
뭘 잘못 만진거지
-
강기분에 익힘책 인강민철 하고 있는데 간쓸개까지 하면 너무 많을 것 같아서 안하고...
-
[맛보기] 2026 수능 기하 태도정리노트 - 평면벡터와 이차곡선 6
현재 제작 중인 자습용 기하 태도정리노트의 2단원 중 일부를 맛보기로 올려봅니다....
-
쌈@뽕하네 ??????????
-
"연애할 가능성이 있는 상태"로 남아있고 싶기 때문... 옯붕이들과 대학 사이의 관계와 비슷할듯
-
수학 5->1 까지 올렸는데 국어는 3에서 벗어나질 못하네 수영탐은 노력으로 되는데 국어가 찐인듯
-
3명 뽑는 과이고 현재 9명 지원함 점공은 6명 점수공개 그 중에 1등임 셈퍼님...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요