-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
&& (R-value)와 얕은복사 개념에 대해 질문있습니다.
22.12.28 01:25 작성 조회수 190
0
공부를 하다가 문뜩 깊은복사와 얕은복사 그리고 && 관련하여 궁금한 점이 생겼습니다.
깊은 복사는 새로운 메모리를 생성해서 다르게 주소를 갖는다 라고 생각해서
m_data = new int[m_length];
for (unsigned i = 0; i < m_length; ++i)
{
m_data[i] = res.m_data[i];
return *this;
}
m_data = new int[m_length]; 와 같이 새로운 메모리를 생성해서 res.m_data를 받도록 해주는 것입니다.
하지만 얕은 복사는 새로운 메모리를 생성하지 않고 서로 같은 주소를 가르킨다 라고 생각해서
int* m_data = new int[5];
m_data[1, 2, 3, 4, 5];
int* r_data = m_data;
m_data[2] = 9;
//9가 출력된다.
std::cout << r_data[2] << std::endl;
m_data 와 r_data 가 같은 주소를 가르켜서 둘이 서로 간섭하는 형태를 볼 수 있다.
그렇다면
Autoptr& operator = (Autoptr&& a)
{
std::cout << "Autoptr move assignment" << std::endl;
if (&a == this)
return *this;
if (!m_ptr) delete m_ptr;
m_ptr = a.m_ptr;
a.m_ptr = nullptr;
std::cout << m_ptr << std::endl;
return *this;
}
에서
m_ptr = a.m_ptr;
a.m_ptr = nullptr;
은 얕은 복사인데 a.m_ptr 이 사라지면 m_ptr도 같이 사라진다 라고 생각하는 것이 아니라 a.m_ptr 만 사라져서 m_ptr 을 간섭하지 못하게 (만약 살아있으면은 a.m_ptr 로 m_ptr을 간섭할 수 있으니깐!) 만든다고 생각하는 것이 맞을까요?
제가 제대로 이해했는지 궁금해져서 이렇게 길게 질문을 남겨봅니다 ㅎㅎ.. 긴 질문 봐주시느라 늘 감사합니다. (꾸벅)
답변을 작성해보세요.
0
답변 1