C_C++

C++, 클래스 생성자에서 동적메모리 사용하는 예

고니자니 2024. 11. 16. 07:55
반응형

C++에서 생성자 내부에서 동적 메모리를 생성하는 예제는 클래스 내부에서 멤버 변수를 동적으로 할당해야 할 때 자주 사용됩니다. new 연산자를 이용해서 메모리를 확보하기 때문에 어딘가에서 반드시 delete 연산자로 메모리를 해제해야 합니다. 그렇지 않으면 객체가 생성될 때마다 사용할 수 있는 메모리가 줄어들게 되며, 전체 프로그램에 영향을 미칠 수 있습니다.

다음은 간단한 예제입니다.

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;

class MyClass {
private:
    char* name; // 동적 메모리로 관리될 문자열

public:
    // 생성자: 문자열 동적 할당
    MyClass(const char* inputName) {
        name = new char[strlen(inputName) + 1]; // 필요한 메모리 크기 할당
        strcpy(name, inputName);               // 문자열 복사
        cout << "Constructor called, memory allocated for " << name << endl;
    }

    // 소멸자: 동적 메모리 해제
    ~MyClass() {
        delete[] name; // 동적 메모리 해제
        cout << "Destructor called, memory deallocated" << endl;
    }

    // 멤버 함수: 이름 출력
    void printName() const {
        cout << "Name: " << name << endl;
    }
};

int main() {
    MyClass obj("DynamicMemory"); // 객체 생성, 동적 메모리 할당
    obj.printName();              // 멤버 함수 호출

    return 0; // obj가 소멸하면서 소멸자 호출
}

Constructor called, memory allocated for DynamicMemory
Name: DynamicMemory
Destructor called, memory deallocated

 

설명:

  1. 동적 메모리 할당: 생성자에서 new를 사용하여 name에 메모리를 할당했습니다.
  2. 소멸자에서 해제: 메모리 누수를 방지하기 위해 소멸자에서 delete[]로 메모리를 해제합니다.
  3. new와 delete 짝: 생성자에서 new로 할당한 메모리는 반드시 소멸자에서 delete로 해제해야 합니다.

참고:

동적 메모리 관리가 까다로울 수 있으므로, 현대 C++에서는 스마트 포인터 (std::unique_ptr, std::shared_ptr)나 std::string 같은 표준 라이브러리를 사용하는 것이 더 권장됩니다.

반응형