[c++] 메모리 누수 방지
C++에서 메모리 누수는 프로그램의 성능과 안정성에 영향을 미칠 수 있는 심각한 문제입니다. 메모리 누수를 방지하기 위해 몇 가지 방법이 있습니다.
스마트 포인터 사용
C++11부터는 std::shared_ptr
및 std::unique_ptr
과 같은 스마트 포인터를 사용하여 메모리 누수를 방지할 수 있습니다. 이들 스마트 포인터는 메모리 자원을 관리하고, 자동으로 메모리를 해제하여 누수를 방지합니다.
#include <memory>
void exampleFunction() {
std::shared_ptr<int> ptr1 = std::make_shared<int>(5);
std::shared_ptr<int> ptr2 = ptr1;
// ptr1과 ptr2는 같은 메모리를 가리킵니다.
} // 함수가 끝나면 ptr1과 ptr2는 자동으로 메모리를 해제합니다.
메모리 할당 및 해제의 일치
동적으로 할당된 메모리는 반드시 적절하게 해제되어야 합니다. new
로 할당된 메모리는 delete
로, new[]
로 할당된 배열은 delete[]
로 해제되어야 합니다.
int* num = new int(5);
delete num;
int* arr = new int[5];
delete[] arr;
RAII(Resource Acquisition Is Initialization) 원칙
RAII는 자원 획득이 초기화되어야 자원 해제가 보장되는 것을 의미합니다. 이를 통해 자원의 올바른 해제가 보장되므로 메모리 누수를 방지할 수 있습니다.
class File {
public:
File(const char* filename) : fileHandle(fopen(filename, "r")) {
if (!fileHandle) {
throw std::runtime_error("Failed to open file");
}
}
~File() {
if (fileHandle) {
fclose(fileHandle);
}
}
private:
FILE* fileHandle;
};
메모리 누수는 심각한 버그를 일으킬 수 있으므로, 위의 방법들을 사용하여 안정적이고 메모리 누수가 없는 C++ 프로그램을 작성할 수 있습니다.
참조:
cppreference.com - Smart pointers
RAII and smart pointers in modern C++