컴공 일기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를 선물하세요.
-
전 성대는 진학사만 유독 낮게 나오고 고대는 후한 정도 텔그<진학사<고속
-
다들 행복하세요 4
즐거운 연말 되세요
-
언매 미적(기하도 고민중) 물1 생1 이렇게 응시할 예정이고, 예비고3입니다 현재...
-
이젠 기다리기 지치네여 1“5“일 정도를 기다려야한다니…
-
얼굴은 고양이상인데 성격은 리트리버같은 여자. 내 친구 이상형이래
-
자작문제 특 5
(대부분) 수요 없는 공급
-
밤샘 ㄹㅈㄷ
-
얼버기 2
아침이네여
-
시간 너무많이 쓰지않고 최저 (2-3등급) 맞추기 쉬운 탐구과목 뭐가 있을까요??
-
생일선물 줄라는데 그친구가 BBQ 별로 안 좋아했어서 푸라닭 나 한번 데려갔던거...
-
얼버기 2
사실 7시에 일어남
-
나 평백 79인데(33333) 서경대 5칸뜸
-
[고1~고2 내신대비 자료 공유] 고1 국어, 고2 문학, 언매 분석 문제 배포 0
안녕하세요 나무아카데미입니다.2025학년도 고1~고2 내신대비를 위해 고1 국어,...
-
ㅈㄱㄴ
-
도와주세요 ㅠㅜ 3시간 수업 기준 문풀 어느정도 하나요
-
아침부터 오르비 해서 졸려서 잤는데 놓침
-
저게 왜 올라갔지..
-
성대 입학처 전화상담 해보니까 제 앞에 저보다 심한 탐구 비대칭이 ㅈㄴ 많아서 제...
-
물론 철저히 분석한 것도 있겠지만 그정도 점수대면 그 넓은 구간에서의 불합 표본이...
-
고연서성한중에 성대만 미어터짐
-
... 8시간 20분. 재수 확정까지
-
정신나가것다
-
하루에 12시간을 자도 불안한게 없다!!!!!
-
국장 1차 4
정시 재수생은 아직 소속대학이 없자나요 그럼 1차 국장은 신청 못하는거에요?...
-
30대후반 늙다리 설대 정성평가랑 면접 걍아웃인가요? 2
짬나는대로 하다가 8월부턴 휴직계내고 올인박아보려하는데 전공상 화2 생2 칠건데...
-
백분위 기준 얼마부터 사탐런이 옳다고 보시나요? 24수능 92(2) 74(3)...
-
내가 130일 리가....
-
정보통에게 들음 곧 나올듯
-
메가스터디 플래너처럼 날짜 적혀있는 플래너 있나요?
-
Old but gold 가 딱 맞는말인듯. 투애니원 진짜 오랜만이다.
-
(서울대 합격 / 합격자인증)(스누라이프) 서울대 25학번 단톡방을 소개합니다. 0
안녕하세요. 서울대 커뮤니티 SNULife 오픈챗 준비팀입니다. 서울대 25학번...
-
ㅈㄱㄴ
-
생1vs지1 4
안녕하세요 생1과 지1 비교해서, 1. 타임어택이 더 심한 과목 2....
-
한양대 인칼은 사실상 2학년될때 과 가고싶은데 선택할 수 있는데 어떤게 낫냐 (계약학과 제외)
-
ㅈㄱㄴ... 그냥 좀 간당하긴 해도 상경 쓸까
-
https://youtu.be/hD1qHGYU1J0?si=sHsTdSD9y7NX-AY...
-
기차지나간당 3
부지런행
-
7수생 기상 3
-
중~대형과 8칸 지금 기준 실지원자 2등인데 반영비 때문에 칸수 높은거긴한데 아무리...
-
ㅋㅋㅋㅋㅋㅋ이아십얼
-
난 입결 아예 모를 때도 약사가 꿈이었는데... 어차피 전망 안 좋은 거 입결 좀 내려주면 안 되나
-
18년도에 영어캠프가서 이거 처음 듣고 한동안 이 노래만 들었는데 벌써 7년이...
-
얼버기 10
-
개때잡 4
본인 중3때부터 생선님 강의 들었음 방학때 개때잡 완강하고 싶은데 3월 넘어서...
-
진심 개피곤함뇨……
-
나는 남자인데 서열정리때문에 학창시절내내 불가촉천민이었음
-
팔로잉 1009명 기준 471개의 글이 쓰였군요. 재밌게들 노셨네
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요