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