프로그램 종료해도 프로세스가 죽지않고 메모리가 늘어나는줄 알고 답변을 했습니다.
~vector()는 더이상 vector를 쓰지 않을때 사용해 보시라고 권한 것입니다.
벡터에 있는 자료를 지울때는 윗분들 말씀대로.
1 vt_tmp. clear();
or
2 vt_tmp. erase( vt_tmp.begin(), vt_tmp.end());
를 이용하는게 맞습니다.
STL책에서 확실하게 비우기 위해서, 2번을 권장했던거 같은데 집에가서 찾아 봐야 겠군요.
그리고 제대로 지워졌는지 확인을 하기 위해선.
vt_tmp.empty() 를 호출 해보면 비었는지 남았는지 알 수 있을 것입니다.
또한 벡터에 포인터를 넣으면 Delete확실히 해줘야 하구요.
프로그램 종료해도 프로세스가 죽지않고 메모리가 늘어나는줄 알고 답변을 했습니다.
~vector()는 더이상 vector를 쓰지 않을때 사용해 보시라고 권한 것입니다.
벡터에 있는 자료를 지울때는 윗분들 말씀대로.
1 vt_tmp. clear();
or
2 vt_tmp. erase( vt_tmp.begin(), vt_tmp.end());
를 이용하는게 맞습니다.
STL책에서 확실하게 비우기 위해서, 2번을 권장했던거 같은데 집에가서 찾아 봐야 겠군요.
그리고 제대로 지워졌는지 확인을 하기 위해선.
vt_tmp.empty() 를 호출 해보면 비었는지 남았는지 알 수 있을 것입니다.
또한 벡터에 포인터를 넣으면 Delete확실히 해줘야 하구요.
다음부턴 제대로 성의있게 답변하겠습니다. ㅡㅡ;
:shock:
clear() 나 erase() 를 호출하면 size() 는 줄어들겠지만 capacity() 는 줄어들지 않습니다.
원질문자분께서는 '메모리 사용량을 줄이고 싶다' 라고 하셨으므로 capacity() 를 줄이는 방법을 생각해 보아야겠죠.
위에 언급된 Scott Meyers 가 제시한 swap() 을 이용하는 방법도 있겠지만..
소멸자후 다시 생성자를 불러주는것도 유효한 방법이라 생각됩니다.
아래 예는 0, 1, 0, 2 를 출력합니다.
(플랫폼에 따라서 1,2 는 더 큰 수가 될 수도 있습니다. 원소 삽입시에 reserve 되는 크기는 정의되어 있지 않으니 더 크게 잡을수도...)
swap 밖에는 확실한 방법이 없다고 들었습니다. Effective ST
swap 밖에는 확실한 방법이 없다고 들었습니다. Effective STL 에 소개되어 있습니다.
도음이 될런지..
음....
☆
소멸자를 그렇게 불러도 괜찮은가요?
소멸자를 그렇게 불러도 괜찮은가요?
[quote="bugiii"]소멸자를 그렇게 불러도 괜찮은가요?[/quo
부른후에 생성자를 다시 불러준다면 괜찮을것 같군요.
소멸자만 부른다음에 그냥 쓰면 낭패.
저도 저렇게 불러도 되는가 궁금한데요. 표준적인 방법인지 궁금합니다
저도 저렇게 불러도 되는가 궁금한데요.
표준적인 방법인지 궁금합니다
저렇게하고 나서 바로 써도 되는가를 묻는것이 아닙니다
dectructor를 호출하는 코드라면 당연히 바로쓰면 안되는건 알고 있습니다.
p.s. 그리고 vector나 map에 pointer를 넣은거라면 delete 해줘야됩니다.
죄송합니다.
죄송합니다. :oops:
프로그램 종료해도 프로세스가 죽지않고 메모리가 늘어나는줄 알고 답변을 했습니다.
~vector()는 더이상 vector를 쓰지 않을때 사용해 보시라고 권한 것입니다.
벡터에 있는 자료를 지울때는 윗분들 말씀대로.
1 vt_tmp. clear();
or2 vt_tmp. erase( vt_tmp.begin(), vt_tmp.end());
를 이용하는게 맞습니다.
STL책에서 확실하게 비우기 위해서, 2번을 권장했던거 같은데 집에가서 찾아 봐야 겠군요.
그리고 제대로 지워졌는지 확인을 하기 위해선.
vt_tmp.empty() 를 호출 해보면 비었는지 남았는지 알 수 있을 것입니다.
또한 벡터에 포인터를 넣으면 Delete확실히 해줘야 하구요.
다음부턴 제대로 성의있게 답변하겠습니다. ㅡㅡ;
:shock:
☆
아 글로쓰니 오해가 많이 생기는군요 답변을 잘못했다는뜻이
아
글로쓰니 오해가 많이 생기는군요
답변을 잘못했다는뜻이 절대로 아니에요;... 미안하실 필요없어요.
그리고 clear 자체가 erase ( begin() , end() ) 를 호출하는걸로
알고 있습니다.
[quote="nachnine"]저도 저렇게 불러도 되는가 궁금한데요.
자세히 찾아보진 않았지만 destructor 호출은 합법적일 것입니다.
( 대략 찾아봤는데 destructor 호출을 금지되어있다는 내용은 못찾았네요. )
실제 사용 예를 들자면..
placement-new 를 사용해 생성자를 호출한 객체의 경우를 생각해 보시면..
destructor 를 직접 불러주는것이 가장 간편한 방법이겠죠? :)
.
.
소멸자 직접호출이 사용될수 있는 예라면..
Re: 죄송합니다.
clear() 나 erase() 를 호출하면 size() 는 줄어들겠지만 capacity() 는 줄어들지 않습니다.
원질문자분께서는 '메모리 사용량을 줄이고 싶다' 라고 하셨으므로 capacity() 를 줄이는 방법을 생각해 보아야겠죠.
위에 언급된 Scott Meyers 가 제시한 swap() 을 이용하는 방법도 있겠지만..
소멸자후 다시 생성자를 불러주는것도 유효한 방법이라 생각됩니다.
아래 예는 0, 1, 0, 2 를 출력합니다.
(플랫폼에 따라서 1,2 는 더 큰 수가 될 수도 있습니다. 원소 삽입시에 reserve 되는 크기는 정의되어 있지 않으니 더 크게 잡을수도...)
[quote="nachnine"]아 글로쓰니 오해가 많이 생기는
MS Visual Studio .Net 의 vector.clear() 는 erase( begin(), end() ) 를 호출하지 않더군요.
물론 .Net STL 의 버그겠지요. ^^
.Net 쓰시는분들은 참고하시길..
참조 : http://gpgstudy.com/forum/viewtopic.php?t=2798
댓글 달기