컴공 일기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를 선물하세요.
-
맞팔해주실분 1
은테가 얼마 안남았습니다 여러분들의 힘이 필요합니다! !
-
그때 예비고1 겨울방학 기간이라 영독학원 다니고 있었는데… 그때만해도 몰랐지 나는...
-
대깨로는 못참죠
-
머리아프다 1
ㅠㅠ
-
나다. 영어가 제일 어렵다ㅅㅂ 듣기 다맞고 18번, 19번, 25~28번 빼곤 다...
-
25학번의대생 3
올해도 휴학인가요 기숙사 이런거는 어케하나요?
-
장원영 설윤 하니 민지 그 외에도 1군 아이돌 다수
-
여기서짧은 시간내에 유의미한 댓글을 작성한 것에 해당 될 수도 있음그렇지만 타인의...
-
4년에 한번씩 생일이 오니까 만나이는 4년에 한번씩 먹을까
-
모르겠넹
-
ㄹㅇ개틀딱이엇음….이때 내가 중2었는데
-
아니 교재배송 2
진짜 개빡치네;; 너므 심하게 구겨져서 넘길때마다 찢어짐..하
-
5월까지 끝내려고하는데 너무 늦거나 양이 많나요?? 정시로 튼지 얼마안돼서 감이...
-
목요일에 쳣출근날인데.... 유튜브로 뭐라도 공부해서 갈까요? 떨려요 조언좀요 ㅠ
-
20살을 즐기고싶구나
-
하 컨텐츠팀 들어갈걸;;; 과외만 하려니까 너무 백수같아서 우울해짐 시간도 일주일...
-
24 수능➡️25 수능 국(언) 낮3➡️백분위 92 수(미) 낮4➡️백분위 87...
-
사탐런 0
평균 3등급정도고 탐구는 4정도입니다 생명 지구를했었다가 이번에 지구, 사문으로...
-
강기분 언매 현정훈 트레드밀 오지훈 매직 기출 오지훈 매직 개념(지구과학2) 김준...
-
셋의 공통점이 있을까요? 있을 거 같은데…
-
수학 과외 수요가 지금처럼 있을까요 과외하고싶어서 수학공부 다시 시작했는데...
-
특히 서고연 분들은 올탭 꼭 하셈 노동강도 0임 그냥
-
계절시험D-1 1
이제시작
-
관리자 기겁할듯 6
-
나군 설인문 다군 고학부씀 ㅇㅇ
-
특히 나보다 공부못하는 새끼가 헛소리로 답변하는 꼬라지 보고다신 안 씀
-
안녕하세요 여러분! 저는 2025학년도 수능을 치룬 현역 고3입니다. 오늘,...
-
와우 0
맨날 모르는 문제 생기면 인강 강사 해설이나 그런거 다 ㅈ까고 유튜브에 어피셜이라는...
-
전단지 그저 goat이동할필요x,잘구해짐 0티어 김과외 1티어 숨고 ㅂㅅ 당근마켓...
-
꼭붙어야 되는데 ㅠㅠ
-
저 상지한 갑니다 ㅇㅇ
-
님들 사설풀때 0
유류분,혈액응고이러면서 평가원 사칭하는글 ㅈㄴ싫지않음?
-
입 안 공간이 확보가 안되네
-
한국인이 있는 곳이 국장이다
-
이거 왜이럼 2
내 2마넌 돌려내
-
이제 막 공부 시작한 현역이고 국어 주간지를 풀까 말까 고민중인데 유대종t 풀커리를...
-
급해요 ㅠㅠ 수학 4에서 5 사이인데 수원수투 김범준쌤 스블 어떤가요? 많이...
-
수학 커리 4
이번 수능 미적3등급입니다. 공통 4틀 미적 3틀인데 강사 추천좀해주세요. 강윤구...
-
https://xurl.es/4stnb
-
지방에서 새벽까지 술 퍼마시면 택시비 할증 짜증나서 맨날 첫차까지 피씨방...
-
오르비 댓글 다는 매크로( 파이썬 구동할 수 있으면 가능 ) 6
from selenium import webdriver from...
-
뭐 선택할까 ㅠ 19
1. 언매 미적 생명 생윤 2. 화작 미적 생명 생윤 3. 언매 확통 생명 생윤...
-
자야되는데 1
라칸안되네,
-
입학사정관들이 ㄹㅇ 공부안하는 깡촌고등학교의 전교권학생이 내신 꿀빨았구나 라고...
-
연대 어문계열인데 합격권인 사람들 중에 점공 안하는 사람 많나요? 있다고 해도...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요