컴공 일기257
게시글 주소: https://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를 선물하세요.
-
번호땀 0
ㄹㅇ 학원에 이상형이 실존하는거임 진짜로 유니콘같은 그래서 수능 끝나고 연락하려고...
-
얼버기 1
리얼얼리버드
-
애옹 2
야옹
-
8시간동안 대회만 보다니 이제 자야지
-
릴스 보는데 수학 문제 오류 제기하는 학생한테 이게 출제자의 의도라고 안 받아주는...
-
But there is nothing left for us to do
-
캬루 레어 살꺼야
-
덕코내놔 0
-
캬루콘 사주세요 0
뿌엥...
-
나머지는 기억 안남
-
기차지나간당 0
부지런행
-
내 금같은 추석이 날아가게 생겼네
-
빈정상함
-
날개돋는 비둘기 3
-
안녕하세요. 경기도 면 단위 학교에 재학 중인 한 학생입니다. 오르비라는 사이트에서...
-
수수수수 9
수퍼노바
-
네.그리고 이유좀 !
-
국어 연계 0
산문은 무조건 고전산문연계인데 운문은 현대랑 고전이랑 번갈아 나오는듯 근데 과년도...
-
모고공부에도 비중을 두면서 할까요 안니면 내신집중으로 수2에 다 때려박을까요 어차피...
-
11시 이후 기상 2시까지는 밥먹고 쳐 놀음 그리고 공부하겠답시고 스카나 도서관...
-
얼른 자 2
네 자러 갈게여
-
온라인으로 확인하면 돼서 종이로 날아오는건 구지 필요없는데 원서접수할때 신청가능한가
-
내ㅔ
-
국어(언매), 사탐(생윤, 윤사) 만점에 영어 1등급일시 수학(확통) 어느정도...
-
새르비때매 생활 패턴이 망가진 느낌
-
찾음
-
진짜 자야지 2
굿밤
-
07 여러분, 이 글에 개추를 누르면 당신은 평백 99를 찍습니다 23
그러나 죄없는 06이상의 나이가 많은 옯붕이는 수능에서 커리어 로우를 찍게 됩니다 누르시겠습니까?
-
북 3
ㅇㅇ
-
진지하다
-
존나귀찮아서걍좋아하는노래담은담에셔플재생하는데 그래야뭔가자주들어도안질림
-
I can't stop love love love
-
플리 0
이런 감성이에요
-
아 7
섹스하고싶다
-
아 1
뭐
-
예 0
아! 제가 오늘 제가 딱! 말 놓고 하고 싶은 얘기 한마디 하겠습니다. 야~ 기분...
-
노래 추천 4
최근에 발굴한것 중에 스노우볼이란 노래가 좋더라구요 근데 아마 못찾으실거에여
-
야 0
동보고 자야지
-
야 4
왜
-
야 1
하자
-
야 1
한개 보여?
-
약간 같이 울컥했어요
-
지듣노 ㅁㅌㅊ 2
-
야!!!!!! 12
-
하루종일 커뮤니티에 지박령처럼 상주하면서 가볍고 비루한 생각을 분 단위로, 시간...
-
서방님... 4
으흐흐

아직도 계셨군요ㄷㄷ드문드문 들어오고 있습니다.

코딩에 대한 열정 대단하십니다초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요