컴공 일기257
게시글 주소: https://app.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를 선물하세요.
-
재미로 수능보는 변태들 때문임?
-
성대 자전 1
윤도영쌤이 첫해는 일단 개꿀이다..? 이런식으로 말씀하셨던거같은데 이번에 성대자전도...
-
마음 정해씀 10
고경으로 간다 취업 생각할거면 차라리 서성한 계약을 가지 마음이 시키는곳으로 가는게 맞는듯
-
푸념 0
수시6광탈->추합X->정시어거지로넣기->애매하게반수시도->실패->수능망령엔딩루트 탈...
-
인스타 릴스에 의대생이 만난 여자~ 이런 제목의 영상 보면 걍 웃김 전혀 관련 없는...
-
학교 추천 예비 1번이라 받은애가 포기하면 내차례긴 한데… 진짜 아깝네
-
가군에 동국대 상향으로 쓰고 나군에 국민대 미래융합이 계속 6칸인데 최초합이었다가...
-
나루토 정주행 1
해야징
-
오르비 언제 살아남뇨 13
걍 잠이나 좀 자야하나
-
호에에에에엥에애애앵 16
배고픈데 침대에서 몬일어나겟슴
-
기하 궁금한데 혹시 간단한 문제 좀 알려주실 수 있나요
-
인하대 2년후기 10
안녕하세요 인하대 컴공 재학생입니다 제가 그래도 2년동안 학교 다니면서 느낀점을...
-
등록 안한다고 해도 정시 못 쓰죠? (저 X 동생 O) 근데 등록했는데 다른 대학...
-
인스타처럼 오르비 계정 비활성화 기능 같은것좀 만들어주시면 안될까요...
-
저는 점수 오르긴함
-
현우진선생님 이지영선생님 G드래곤 등등 훌륭한 사람들은 제발 결혼해서 좋은 유전자좀...
-
전형태 언매 올인원 들을 생각이었는데 노베를 위한 강의라는 평이 있어서... 다른...
-
집은 대전이고 둘중 간다면 어디 가실건가여
-
있으면 알려주라
-
본인 예비 고3(07) 서울에 거주 중이고 현재 상태 고2 9,10모 국수영 3...
-
5상향에 딱 하나 1소신 넣은건데 예비 90번 뜨길래 맘편히 있었는데에 벌써 내가...
-
수고비 35000원 택배비 5000원 드립니다. 총 두 과목 받아주시면 됩니다. 연락주세요.
-
짱구 공룡편 혼영이나 해야겠당
-
11월 시험침 12월 결과나옴 1월 원서접수함 2월 발표함 2월 말에 추합 발표함...
-
고대뱃지받고싶다 0
학추 역대급 폭이네 ㅁㅊ
-
높공인건가 흠
-
서성한 12
서강대 컴공 성대 전전,소프트 냥대 화공 3중에 어디가 좋나요
-
언매 vs 화작 4
문과계열 서성한 이상 생각 중인 예비 고3입니다. 수학은 확통, 사탐은 사문, 정법...
-
한 문제 정도 더 맞추면 2+인데 아쉽네요.
-
특히 벡터, 공도 해설지 보면 물론 이게 정공법인 거 아는데 왜 이렇게 풀어 그냥...
-
탈릅하기엔 여기가 분위기 따스하니 아쉽고 안하기엔 2월달에 발표 시즌되면 합격증...
-
이렇게 쓰면 세개다 붙을까 모르겠네 가군 나군은 대형과라 크게 칸수가 변할거 같진 않아보이는데
-
제발.. 붙or떨 확률 뭐가 높아보임 31명모집이에요
-
중앙대 외대 중경외시 건국대 건대 라인 낙지 이정도면 적정으로 봐도 되나요?
-
윤 대통령 지지율, 국회 탄핵안 가결 후 30%대 회복 [데일리안 여론조사] 22
[데일리안 = 송오미 기자] 지난 14일 국회 탄핵소추안 가결 후 윤석열 대통령과...
-
공도 삼수선정리가 더더욱 그런데 얘를 논리적으로도 안뚫리고 공간적으로도 ????함...
-
성적높은 친구들이 다군에 고대밖에 쓸데가없네
-
확통은 뭐 팁이라고 할 만한 게 없네
-
알바사장 개빡침 0
원래 나가는 날도 아닌데 나오라고 해서 안된다니까 이유 개 끈질기게 묻더니 결국...
-
김승리 1
김승리쌤 주간계획표는 어디에 올라와있나요??
-
지역교과 입니다. 혹시 계신가요??
-
삼반수 0
재수때 6,9모 34311 13311 이었고 국어실모는 2밑으로 떨어진적 단 한...
-
아무 생각없이 푼 공도 문제 그림을 다시 보니까 삼수선을 찍찍 그어놨음 ㅋㅋ 너무...
-
복학 전 외붕이의 외대 이모저모 (입결, 경영복전 포함) 12
10월 전역하구 정신없이 두 달 쳐놀다보니 슬슬 정시철이더라구요 에타 새내기게시판...
-
전 극호
-
며칠 동안 계속 나무위키 실검에 있는거임? 듣도보도 못한 내용인데 좀 치우지
-
한의대 다니시는 분들 10
한의대 공부 얼마나 빡센가요? 빡세다면 공부한 만큼 보상받는다고 생각하시나요??
-
어떤 게 좋을까
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요