컴공 일기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
컴이 없다...
-
알찬 하루엿다
-
솔랭 2승6패중 1
시발
-
남들 옮창같다고 할때가 아님을 깨닳았으요.
-
왜 컴공이 높공일까 16
개발자 시장 진짜 개박살이고 권고 사직한다는 소리도 스타트업 ~ 중견 중심으로 계속...
-
이런..
-
...제 목표는 6
내년 화학 1컷 42.만백 100 이에요...
-
개인적인 의견으로는 지방출신 학생들은 지거국에 갈만한 메리트가 많게 했어야 한다고...
-
고연전 안암 길거리에서 어깨동무하고 민족의 아리아 부르는거 보니 고대 마렵네
-
하나하나 쪽집게로 뽑는거 선호하는데 피부 망가지는거 같아서....면도로는 커버...
-
아직 뚜렷한 꿈이나 진로가 없는데 이 두 과중 어디로 진학하는게 더 좋을까요..??
-
이감 모의고사 연간패키지말고 개별구매는 안되나요? 그리고 간쓸개는 어떻게 따로 사나요?
-
https://chatgpt.com/share/6783c5c4-93dc-8011-9b...
-
목표를 이루니까 20
뭘 해야될지 모르겠네
-
공부의 질이 달라짐 일요일에는 잇올 가기 귀찮아서 스카 왔는데 오르비만 처하고있음...
-
덕코 10
주세요
-
구합니다 님이 너무 세면 제가 거절할수도
-
설대 식영 약폭인가요? 391.2x이면 1차합도 어렵나요?
-
플라스틱메모리즈 보고 펑펑운전적있음
-
원래 입꼬리쪽 깨끗했는데 수능끝나고 칩거생활 시작한 뒤로 갑자기 검은 털 났어요;;...
-
지방 메디컬 졸업하고 최선의 선택인거 같은데
-
굴릴 게 생각이 안남뇨 저격할수도없고
-
크아아ㅏ아ㅏ악
-
고해합니다 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 만들 수 있음
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요