• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

&& (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을 간섭할 수 있으니깐!) 만든다고 생각하는 것이 맞을까요?

제가 제대로 이해했는지 궁금해져서 이렇게 길게 질문을 남겨봅니다 ㅎㅎ.. 긴 질문 봐주시느라 늘 감사합니다. (꾸벅)

 

 

 

답변 1

답변을 작성해보세요.

0

강민철님의 프로필

강민철

2022.12.29

간섭하지 못하게 한다는 표현을 조금 더 명료하게 정리하시면 더욱 좋을 것 같습니다.

그 외에는 잘 정리해주신 것 같습니다 :)