본문 바로가기

메모리

shared_ptr에서 배열(array) delete[]로 해제하는 방법 shared_ptr은 C++에서 제공하는 스마트 포인터입니다.메모리의 관리가 까다로운 C++에서 유용하게 사용이 가능합니다.shared_ptr은 참조 카운트(Reference Count)를 통해서 메모리 해제 시점을 결정합니다.shared_ptr은 기본적으로 사용된 메모리를 delete로 해제하게 됩니다.배열(new [])이 저장되어 있을 경우에 배열의 해제를 할 수 있는 방법은 다음과 같습니다.1. delete[]를 호출하는 함수 객체를 생성초기화를 할 때 포인터와 함께 메모리를 해제할 때 사용할 함수를 전달하는 방법입니다.shared_ptr은 생성자에 메모리 해제를 위한 deleter를 전달할 수 있습니다.메모리 할당을 위한 함수를 전달하는 것도 가능합니다.함수 객체 혹은 함수를 전달해서 shared.. 더보기
C/C++ 포인터 기본 C/C++에서 포인터는 처음에 이해하기 어려운 개념입니다.메모리의 어느 지점을 가리키는 포인터때문에 C/C++에 흥미를 잃고는 합니다.사실 포인터는 하나의 타입일 뿐입니다.C를 처음 공부할 때 쓰는 scanf()를 사용할 때는 printf()와는 다르게 변수명 앞에 &를 붙입니다. 이 &가 변수의 주소값을 나타내다는 것을 알고 있습니다.포인터는 바로 이런 메모리의 주소를 저장하는 타입입니다.변수는 메모리의 영역에 붙어있는 이름입니다. 변수가 선언되면 다음과 같이 메모리 영역이 확보가 됩니다.int형 변수를 선언하면 이렇게 4바이트의 메모리가 할당됩니다.포인터의 선언은 타입명* 변수명;의 형태로 선언합니다.포인터는 흔히 후라이팬과 손잡이로 표현이 많이 되곤 합니다.후라이팬의 중심부는 실제 할당된 메모리로 .. 더보기
C++ 동적 할당 new / delete 사용시 주의점 C++은 메모리 관리가 상당히 까다로운 언어입니다.사용자가 메모리의 동적 할당과 해제를 할 책임이 있기 때문입니다. 조금만 실수하면 메모리 누수나, 메모리 접근 위반으로 프로그램이 강제 종료됩니다.메모리 누수란 프로그램이 종료되기 전에 할당한 모든 메모리가해제가 되어야 하는데할당된 메모리가 해제가 되지 않을 때 발생하는 문제입니다.메모리 접근 위반은 초기화되지 않은 포인터 혹은 할당된 범위 밖을 호출할 때 발생합니다.초기화되지 않은 포인터는 어떻게 작동할 지 예측을 할 수 없습니다.대부분의 경우는 프로그램이 강제 종료됩니다. new 사용하여 메모리를 동적 할당할 시에 주의할 점은 다음과 같습니다.new는 delete로 해제하고, new[]는 delete[]로 해제해줘야 한다는 것입니다.간단한 규칙으로 보.. 더보기