스마트(smart) 포인터
RAII(Resource Acquisition Is Initialization)
기본 개념
#include <iostream>
#include <fstream>
class FileRAII {
public:
// 생성자에서 파일 열기
FileRAII(const std::string& filename)
: file(filename) {
if (!file.is_open()) {
throw std::runtime_error("Unable to open file");
}
}
// 소멸자에서 파일 닫기
~FileRAII() {
if (file.is_open()) {
file.close();
}
}
// 파일에 쓰기
void write(const std::string& content) {
if (file.is_open()) {
file << content;
}
}
private:
std::ofstream file;
};
int main() {
try {
FileRAII file("example.txt");
file.write("Hello, RAII!");
} catch (const std::exception& e) {
std::cerr << "Exception: " << e.what() << std::endl;
}
// 파일이 자동으로 닫힘
return 0;
}소멸자가 호출되는 시점
기존 포인터 문제점
unique_ptr (C++11)
유니크 포인터의 사용이 적합한 경우
클래스에서 생성자, 소멸자
지역 변수
STL 벡터에 포인터 저장하기

unique_ptr 만들기(C++14)
unique_ptr 이 공유 될 때 문제


C++14 이후 해결책


make_ptr 을 통해 unique_ptr 만들기

유니크 포인터 재설정, 원시 포인터 가져오기, 원시 포인터 소유권 박탈하기
유니크 포인터 재설정
원시 포인터 가져오기

원시 포인터 소유권 박탈하기


유니크 포인터 소유권 이전하기




유니티 포인터 베스트 프렉티스
shared_ptr(C++11)
가비지 콜렉터
가비지 컬렉션의 문제점
참조 카운터
강한 참조
참조 카운팅의 문제점
shared_ptr
shared_ptr 만들기
shared_ptr 특징

스크린샷 2024-06-11 11.26.48.png
shared_ptr 공유하기

shared_ptr 재설정하기

shared_ptr 를 사용할 때 발생하는 순환 참조 문제



Last updated