inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

C개발자를 위한 최소한의 C++

[실습 프로젝트: CMyString] 문자열 필터 개선 - Step10 (※매우 중요)

문자열 필터 실습 코드 중 질문 드립니다.

해결된 질문

232

김상현

작성한 질문수 62

0

안녕하세요. 강의 잘 보고 있습니다.

실습 중 궁금한 것이 있어서 질문 남깁니다.

CMyStringEx::onSetData 함수 내용입니다.

void CMyStringEx::onSetData(const char*& param)
{
    CMyString::onSetData(param);
    // 생략
    if (param != nullptr) {
        if (strcmp(param, "멍멍이아들") == 0) {
            // delete [] param;
            param = "우리귀요미";
        }
    }
}
  1. param이 가리키고 있는 곳의 데이터가 "멍멍이아들" 문자열이면 "우리귀요미"라는 새 문자열이 담긴 주소로 바꿔주기 전에 기존 param이 가리키고 있는 곳을 delete 해줘야 메모리 누수가 발생하지 않을 것 같은데 맞나요?

  2. 만약 1번이 맞아서 delete를 한다면 CMyString::~CMyString() 소멸자가 호출될 때 문제가 발생할 것 같은데 이를 어떻게 해결하면 될까요?

     

c++ microsoft-windows 객체지향 디자인-패턴

답변 1

0

널널한 개발자

  1. onSetData() 함수는 문자열을 저장하기 위한 메모리를 할당하기 전에 호출됩니다. 여기서 원본 문자열을 슬쩍 바꿔치기 하는 것이지요. 따라서 메모리 누수를 걱정할 필요는 없겠습니다. 문자열의 본질은 cost char[] 입니다. 첫 글자가 저장된 메모리 주소로 식별하는 것이 보통인데 문자열은 이름이 없는 배열과 같고 주소로 식별합니다. 그리고 이 문자열 상수는 정적 영역 메모리에 이미 로드되어 있습니다. 따라서 원본 문자열의 메모리 누수를 걱정할 이유는 없겠습니다.

  2. 1번에서 설명한 내용에 따라 고려의 대상이 아닙니다.

참고하시기 바랍니다. 😄

1

김상현

감사합니다. 제가 생각이 짧았습니다. 지금 다시 보니 매개변수로 받은 문자열을 바꿔치기 하는 것이지 멤버 변수를 조작하는 것이 아니었네요...

인터페이스 상속과 추상 자료형 2:00 질문

0

50

1

13분 42초의 예제

0

52

2

네임스페이스 스코프 내에서 정의된 변수, 함수들이 위치하는 곳 질문

0

47

1

소멸자 가상함수 질문

0

55

2

이동생성자의 매개변수로 넘어가는 임시객체의 값 유지 관련하여 질문이 있습니다.

0

63

2

임시 객체 복사 생성자 질문드립니다

0

66

2

변수 바인딩에 대한 의문점

0

113

1

C++ 파일 구조 질문

0

128

1

빈 포인터에 멤버함수 호출

0

104

1

파생클래스에서 virtual함수를 선언에 대한 질문입니다.

0

116

2

순수 가상 클래스 선언과 일반 인트 변수의 선언과 다른가요?

0

137

2

안녕하세요. 이동의미론에 대해 제가 잘 이해했는지 궁금합니다.

0

132

1

인스턴스의 개념에 대해 int a(3), int(5) 예시를 바탕으로한 질문입니다.

0

189

2

식별자 검색 순서 관련 namespace 생략 관련 오류에 관한 질문

0

175

1

마지막 주소록 예제 c 파일 한글 깨짐 현상

0

190

1

nullprt vs null

0

153

2

쓸데없지만 질문드리고싶습니다

0

181

1

복사 생성자 질문 드립니다.

0

221

1

생성자 궁금한거 있습니다

0

218

2

단순대입 오류 발생 이유

0

235

1

네가지 형변환 강의 질문

0

283

1

CMyString Step10 강의 질문

0

174

1

임시 객체와 보이지 않는 복사 생성 강의 질문

0

268

2

섹션8 3번째 강의 (실습 프로젝트 - 문자열 필터개선) 질문

0

219

2