컴공 일기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하면 되는 것 아니겠느냐?
-
고경 65x안정이라니.
-
하루만에 렙 10은 너무하잔
-
제목이 질문입니다!!
-
없어도 괜찮겠지 뭐...
-
그냥 미친놈 그 자체였음ㅋㅋ..
-
고대 진학사 컷 0
고려대 낙지 컷 아시는 분을 찾아요 정외 행정 국문 역사교육 아시는 분 제보해주시면...
-
아이민 3만대던데 왜저러고살까
-
남들처럼 솔텍 식센모 oz모 폴라리스 풀다가 지구과학 4년하고 4등급 받을수도 있어요 。◕‿◕。
-
642까진 안오겠죠..? 기대 안하는게 맞겠죠..?ㅠㅠ
-
내 과앤 n=3널렷는데 10
머징; 저정도로 인생 망한거마냥 소수아님
-
경주재밌다 2
이제 체력을다쓴듯함..
-
드립 폼이 미쳐버림
-
연대 경영 논술 0
난이도가 어느 정도인가요? 그리고 연경 논술 붙으신 분들 논술 처음 했을 때부터...
-
버스 와서 살았다
-
아니면 조발을 어케 확인하지 하루종일 오르비하기?
-
눈오네요 3
올해 유독 눈이 자주 내리는거 같아요
-
경영, 경제가 궁금합니다.
-
지방 치한 정도 쓰나요?
-
의대면접가서 돈보다는 생명구하고 싶다는 숭고한 개소리 하지 않기를 0
그냥 존나 겸손하게 제가 아는것은 없지만 제가 아직은 잘 모르지만 우선은 학교과정에...
-
(나)조건에 의해서 이차함수 f()의 최고차항이 9인건 알았으나, 이차함수의...
-
커피 마싯다 3
헤헤..
-
입만 살아있는 사람 싫어해유
-
ㅈㄱㄴ 이거 하고 영어 해석이 더 잘 됐다 하는 게 있다면 댓글로 남겨주시면...
-
어무니가 8월부터 휴대폰 요금 500원이라고 말씀하심
-
그게 제일 빠르게 성적 올리는 방법이에용 불안하다고 막 주변에 있는 친구들...
-
삼도극 자작문제 0
수정해서 다시 올리겠습니다!! 제가 세밀하게 프로그램 같은 거 사용 안 하고 직접...
-
너무야해요 14
스몰 딜X ㄷㄷㄷㄷㄷㄷ
-
아 에바지... 0
1분 뒤에 버스 온다하고 바로 대기로 바뀌면 나보고 어쩌라는겨...
-
좀 심해지면 자기객관화를 못함 삼수 자기연민은 본인은 노력했다는 자기합리화로...
-
학과장 면담 하기 싫은데;;
-
지금 아이디어, 어삼쉬사하고있는데 어삼쉬사는 1월안에 끝날거같고, 아이디어는 2월...
-
방 빼야해서 그냥 버릴거 싹 버리고 챙길거 다 챙기려는데 이거 언제 다 치우냐…
-
엄빠가 그래도 합격 발표나고 하자는데 쫄리네
-
대체 뭔가요?
-
질문 : 예비 고3 겨울방학 어떤 모의고사를 풀어야 할까요? 기출을 통해 공부하는...
-
드디어 마음 먹었어
-
....
-
고대 진학사나 코핌 컷 아시는 분 계세요? 경영 정외 행정 국문 역사교육 이렇게...
-
구글에서 교재나 강의 이름을 치고 오르비 or 디시를 뒤에 적고 검색 여러 후기들...
-
고경제쓸걸 0
후..
-
與 미디어특위 "이재명, 정언중(政言中) 커넥션 해명하라…신화통신과 극비회동" 2
[데일리안 = 김민석 기자] 국민의힘 미디어특별위원회가 이재명 더불어민주당 대표의...
-
오늘 뭔 날인가 1
별,,,
-
ㅎㅇ
-
연대는 조발하라 0
조발하라 조발하라
-
……
-
얼버기 0
자는 시간이.. 점점 늘어나는 것 같아..
-
67x들고 고대가기가...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요