반응형
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
설명:
- 동적 메모리 할당: 생성자에서 new를 사용하여 name에 메모리를 할당했습니다.
- 소멸자에서 해제: 메모리 누수를 방지하기 위해 소멸자에서 delete[]로 메모리를 해제합니다.
- new와 delete 짝: 생성자에서 new로 할당한 메모리는 반드시 소멸자에서 delete로 해제해야 합니다.
참고:
동적 메모리 관리가 까다로울 수 있으므로, 현대 C++에서는 스마트 포인터 (std::unique_ptr, std::shared_ptr)나 std::string 같은 표준 라이브러리를 사용하는 것이 더 권장됩니다.
반응형
'C_C++' 카테고리의 다른 글
C++, 클래스 템플릿 class template (0) | 2024.11.18 |
---|---|
C++, 복사생성자 Copy Constructor (0) | 2024.11.17 |
C++, 단항연산자 오버로딩 (전위 후위 연산자) (0) | 2024.11.15 |
C++, 프렌드 함수로 연산자 오버로딩 만들기 (0) | 2024.11.14 |
C++, 멤버함수로 연산자 오버로딩 (0) | 2024.11.13 |