[c++] 메모리 누수 방지

C++에서 메모리 누수는 프로그램의 성능과 안정성에 영향을 미칠 수 있는 심각한 문제입니다. 메모리 누수를 방지하기 위해 몇 가지 방법이 있습니다.

스마트 포인터 사용

C++11부터는 std::shared_ptrstd::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++