IT/C C++
-
c++ iterator에서 vector 요소를 삭제하기 및 주의점IT/C C++ 2023. 6. 17. 16:25
아래와 같은 말도 안 되는 벡터가 있다고 가정해 보자. 뭔가 잘못된 문자가 껴 있는 거 같아서 iterator를 돌려서 특정 문자를 삭제해보려고 한다. 위처럼 iterator를 돌려서 특정 조건에 해당하는 요소를 erase 함수로 지울 수 있다. 그런데 이것은 틀렸습니다!! 위 코드를 돌려보면 애석하게도 결과는 아래와 같이 나온다. 해당 iterator의 요소를 erase 함수로 삭제해 버리면 해당 it 값은 사라져 버리고 erase 함수는 삭제에 성공하면 그다음 위치의 iterator 위치를 반환하기 때문에 위처럼 코드를 작성하면 모든 vector를 순회하지 못하기 때문이다. 위 코드처럼 조건에 맞는 erase 가 호출되었을 때 it의 위치를 erase가 반환해 주는 포지션 (삭제된 it의 다음 위치)..
-
C++ 스마트 포인터 [unique_ptr , shared_ptr, weak_ptr]IT/C C++ 2023. 6. 15. 18:01
C++에서 스마트 포인터는 동적으로 할당된 메모리를 관리하는 데 사용되는 유용한 도구이다. 메모리 누수와 관련된 문제를 방지하고 자동으로 메모리를 해제함으로써 프로그램 안정성을 향상시키는 데 도움을 줄 수 있다. C++에는 다양한 스마트 포인터 종류가 있지만, 가장 일반적으로 사용되는 세 가지 스마트 포인터는 아래와 같다. unique_ptr: unique_ptr는 C++11에서 도입된 스마트 포인터로, 독점적 소유권을 가진다. 즉, 특정 객체에 대한 unique_ptr은 해당 객체를 독점적으로 소유하고 관리한다. 다른 unique_ptr이나 포인터에 할당하려고 시도하면 컴파일 오류가 발생하며, 이는 단일 소유자가 있고, 소유자가 객체의 수명을 관리하므로 메모리 누수를 방지하는 데 도움이 될 수 있다. ..