컴공 일기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를 선물하세요.
-
탐구 망친 사람들 -> 연고대 표준변표로 인해 국수성적에 비해 라인이 좋지 않거나...
-
26수능 준비계획 15
국어- 강민철풀커리 수학- 강민철풀커리 영어- 강민철풀커리 생윤- 강민철풀커리...
-
저는 다정하고 절 너무나 아껴주는 사람 이외에도 많지만..음.
-
솔직히 나정도 팔로잉이면 네임?드 중에 오르비 활성화 측정할 수 있는 유일한 사람인가
-
풀이과정 자체는 "여기까지가 템플릿임" 하고 대놓고 제시해주는 수준이긴 한데 뭔가...
-
최대한 많이 풀고 독재 들어가야지
-
수요조사 9
나는 엡실론-델타 논법을 (이해하기 쉽게) 설명하는 칼럼을 읽을 의향이 있다/없다...
-
하하 웃음이 나며 울음이 나네
-
그냥 미친척하고 가에 성대 사과 나에 성대 인과 다에 외대 경영 박을까 1
외대 경영도 6칸 추합이라 쫄리기는 한데ㅋㅋ
-
폭 조심해야할까요? 거의 대부분 과들은 최초합 인원이 모집인원보다 적던데
-
빨리 학점 가르쳐줘
-
혹시 정모 있으면 저도 끼워주실 수 있나요?
-
모든 케이스 다 검증해보긴 했는데 이상하게 확신이 안 들어서 그냥 ‘이거 틀리면...
-
일찍 자러갈게요 2
얼버잠
-
연대 700 고대 661 진학사랑 고속은 거의 비슷하던데 어디가 더 나은거죠...
-
너무 위험한가요?
-
조금이라도 비호감 살 짓은 안하니까 이미지는 좋아서 그냥 어느정도 얘기하고 가끔...
-
뭔데 6
니들 많이 서러웠어??
-
다 구해놓고 미지수 값이 안 나와서 환장하다가 코사인법칙 겨우겨우 찾아내서...
-
아주대 공대 수준 11
아주대 공대 인식 어떤가요? 국숭보다 아래인가요?
-
둘중 뭐가 더 낫죠?ㅜㅜㅜ
-
나중에 어떡할라고 30넘어가면 같이 밥먹고 술먹을 사람 잘 없음 ㅇㅇ
-
조금씩 보이는데… 모두가 빵을 예상하고 있어서 오히려 폭날 것 같음 좀 불안허네
-
허수 거른 건데 이러면 답 없나요…ㅠ
-
최초합을 정원보다 많이 잡는 경우는 무슨 경우임 ? 3
나중가면 앞 표본들이 안 쓸거라고 자체 판단하는건가
-
천원 정도 하는데 생각보다 양 많음
-
ㆍ
-
수학 원점수 어디까지 떨어졌을지 상상하기도 싫음 그나마 저게 보인 덕에 풀이...
-
146분 씹ㅋㅋ
-
저게 그정도로 쉬웠는지 모르겟어요
-
. 메이저리그 하위타선 급은 됨?
-
ㅈㄱㄴ
-
논술 미응시해도 합격처리되는 경우가 있을까요?? 성대의대/숙대약대/인하대의대 논술...
-
6 9 11 올해 다 2등급이었습니다 실수가 항상 1-2개 나와서 이것만 맞혔으면...
-
강대 기숙 0
강대 기숙 의대관 6평 국 수 영 70 96 2등급 7반 확정인가요??
-
ㅈㄱㄴ
-
살빼고 몸만들어서 알파남 되자
-
낙지 정상화 될까요...?
-
뭐가 그나마 더 어려웠음?
-
전 프랜차이즈가 한계임 아직까지... 반수하면서 대충 이런 로컬식당도 몇번 가보긴 함...
-
책장 정리 끝 2
강기본 독서랑 문학, 시발점 수1 끝내고 방바닥에 뿌려져있던거 싹 정리했습니당 아직...
-
어떤가요
-
벌점준다고 젖지한테 오는것같음..
-
아인 검정색은 진짜 못쓰겠어서 빨간색 샀는데 너무 잔찌끄레기들이 많이나옴… 최대한...
-
생1,생2를할수밖에없을거같아요 물,화는손대면안되고 지구는 개념강의갯수보고 바로후퇴해버려가지고요
-
동국대 컴퓨터ai학부 인문(컴공인듯) 최초합격 6칸 동국대 시스템반도체학부 2칸...
-
할바에 과탐함 진심으로 연도암기표 한번본적있는데 사람이 외울수가잇노.
-
치즈케이크도 포장해왔다 27900 + 13900 하지만 의미있는 소비였다... 앞...
드문드문 들어오고 있습니다.
초보라서 갈 길이 먼 것 같습니다.. 감사합니다..
아직 계시네요 ㄷㄷㄷ 전역 얼마나 남으셨나요