25.06.04 (3) - 추가 학습

김영하·2025년 6월 4일

C++

목록 보기
18/32

자원 관리 관련


메모리 누수 발생 코드 분석하고 보완하기

#include <iostream>
using namespace std;

class MyClass {
private:
    int* ptr;

public:
    // 생성자
    MyClass() {
        ptr = new int(10); // 동적 메모리 할당
        cout << "메모리 할당 완료!" << endl;
    }

    // 소멸자
    ~MyClass() {
      
    }

    void print() const {
        cout << "값: " << *ptr << endl;
    }
};

int main() {
    MyClass obj;
    obj.print();

    // main 함수 종료
    return 0;
}

간단한 문제로,
메인 함수가 종료되고 클래스가 소멸할 때
소멸자에서 ptr 포인터를 delete 해주지 않기 때문에 메모리 누수가 발생한다.


스마트 포인터를 활용한 로그분석기 구현

  • 요구사항
    1) 로그 메시지는 중요도에 따라
    Info Warning Error 로 분류되어 기록되며
    로그 앞에 태그로 붙어 표시된다.
    ex)
    [Info] 메시지
    [Warning] 메시지
    [Error] 메시지

2) 로그 기록기는 단 하나의 인스턴스만 존재해야 하며,
unique_ptr 을 통해 이를 보장할 것

3) 지금까지 기록된 로그의 총 수를 출력 가능

  • 코드
#include <iostream>
#include <string>
using namespace std;

class Logger {
private:
    int logCount;

public:
    Logger() : logCount(0) {};

    void logInfo(string message) {
        cout << "[Info]: " << message << endl;
        logCount++;
    }

    void logWarning(string message) {
        cout << "[Warning]: " << message << endl;
        logCount++;
    }

    void logError(string message) {
        cout << "[Error]: " << message << endl;
        logCount++;
    }

    void showTotalLogs() {
        cout << "Total logs recorded: " << logCount << endl;
    }

    ~Logger() {
        cout << "Logger instance destroyed." << endl;
    }
};

int main() {
    unique_ptr<Logger> logProgram = make_unique<Logger>();

    logProgram->logInfo("System is starting.");
    logProgram->logWarning("Low disk space.");
    logProgram->logError("Unable to connect to server.");
    logProgram->showTotalLogs();
    
    // 자동 delete

    return 0;
}

profile
내일배움캠프 Unreal 3기

0개의 댓글