실행하다 보면 뻑나죠?
그중에 하나가 데이터 오염입니다.
다음은 전형적인 데이터 오염의 예입니다.
class Tst
{
private:
int a;
public:
Tst():a(100){}
int GetA()
{
return a;
}
};
int main()
{
Tst t;
int* pp = (int*)&t;
*pp= 10000;
printf("%d\n", t.GetA());
...
}
클래스에서 private로 선언하면 보호받을 거 같죠?
이 예제를 돌리면 a 값은 바뀌어 버립니다.
포인터 사용에서 leak, dangling point, spoil을 조심해야 하는데 private라고 하면 접근 권한 때문에 데이터 접근이 마음대로 안되니까
보호받을 수 있다고 착각할 수도 있습니다.
c++에서 private는 그냥 scope입니다. 이런 스코프를 설정했다고 해서 데이터의 오염을 피할 수 있는 것은 아닙니다.
이점 주의가 필요해서 잡글 올려보았습니다.