C++의 큰 특징 중 하나
Pointer를 이용한 직접적인 메모리 관리가 가능하다.
하지만, 프로그래머가 직접 관리하다보니 메모리 누수가 발생할 수 있다.
이를 위해 Smart Pointer를 사용한다.
Smart Pointer는 일반 Pointer를 wrapping하는 형태로 구성된다.
1. unique_ptr (Unique Pointer)
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass 생성자 호출\\n";
}
~MyClass() {
std::cout << "MyClass 소멸자 호출\\n";
}
void doSomething() {
std::cout << "뭔가를 수행 중...\\n";
}
};
int main() {
// std::unique_ptr을 사용하여 동적으로 할당된 객체를 관리
std::unique_ptr<MyClass> uniquePtr = std::make_unique<MyClass>();
// 객체에 접근
uniquePtr->doSomething();
// 메모리는 자동으로 관리되므로 따로 delete할 필요 없음
return 0; // uniquePtr가 범위를 벗어나면 MyClass는 자동으로 삭제됨
}
2, shared_ptr (Shared Pointer)
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() {
std::cout << "MyClass 생성자 호출\\n";
}
~MyClass() {
std::cout << "MyClass 소멸자 호출\\n";
}
void doSomething() {
std::cout << "뭔가를 수행 중...\\n";
}
};
int main() {
// std::shared_ptr을 사용하여 여러 곳에서 동적으로 할당된 객체를 공유
std::shared_ptr<MyClass> sharedPtr1 = std::make_shared<MyClass>();
std::shared_ptr<MyClass> sharedPtr2 = sharedPtr1; // 참조 계수가 증가
// 객체에 접근
sharedPtr1->doSomething();
sharedPtr2->doSomething();
// 메모리는 참조 계수에 따라 자동으로 관리됨
return 0; // sharedPtr1과 sharedPtr2가 범위를 벗어나면 MyClass는 자동으로 삭제됨
}
3. weak_ptr (Weak Pointer)
Deque(및 Queue, stack)의 메모리 관점에서 구현 방식 (0) | 2024.02.07 |
---|---|
C++ Lvalue와 Rvalue (0) | 2024.02.07 |
C++ 삼항연산자 ( a > b ? 1 : 2 ) (0) | 2024.02.07 |
Constant Expression : constexpr 키워드에 대하여 (하드코딩, 메모리 관리) (0) | 2023.08.23 |
댓글 영역