스마트 포인터는 동적으로 할당된 개체에 대한 메모리 할당 및 할당 해제를 관리하는 C++ 클래스 유형입니다. 메모리 관리를 개선하고 메모리 누수 및 매달린 포인터의 위험을 줄이도록 설계되었습니다.
스마트 포인터에는 unique_ptr, shared_ptr 및 weak_ptr의 세 가지 주요 유형이 있습니다. 각 유형은 가리키는 개체의 수명 동안 서로 다른 수준의 소유권과 제어를 제공합니다.
unique_ptr은 개체를 독점적으로 소유하는 스마트 포인터입니다. 즉, 주어진 시간에 주어진 개체를 가리키는 unique_ptr은 하나만 있을 수 있습니다. unique_ptr이 소멸되면 가리키는 개체와 연결된 메모리를 자동으로 할당 해제합니다.
반면에 shared_ptr은 동일한 개체에 대한 여러 포인터를 허용하고 참조 계산 메커니즘을 사용하여 개체의 수명을 관리합니다. 개체를 가리키는 모든 shared_ptrs가 소멸되면 개체가 자동으로 할당 해제됩니다.
weak_ptr은 가리키는 개체의 참조 횟수를 늘리지 않고 shared_ptr을 만들 수 있도록 하는 스마트 포인터 유형입니다. 이는 약한_ptrs가 참조 횟수에 기여하지 않기 때문에 순환 참조가 발생할 수 있는 상황에서 유용하므로 개체가 할당 해제되는 것을 막지 않습니다.
스마트 포인터를 사용하면 메모리 관리가 자동으로 처리되고 메모리 누수 및 댕글링 포인터의 위험이 크게 줄어들기 때문에 C++ 프로그래머는 보다 안정적이고 효율적인 코드를 작성할 수 있습니다.
다음은 C++에서 스마트 포인터를 사용하는 간단한 예입니다.
#include <memory>
#include <iostream>
class MyClass {
public:
MyClass() { std::cout << "MyClass constructor called." << std::endl; }
~MyClass() { std::cout << "MyClass destructor called." << std::endl; }
void doSomething() { std::cout << "Doing something." << std::endl; }
};
int main() {
std::unique_ptr<MyClass> ptr(new MyClass()); // Create a unique pointer to a new MyClass object
ptr->doSomething(); // Call a member function on the object using the -> operator
// The object will automatically be deleted when the pointer goes out of scope
return 0;
}
이 예제에서는 콘솔에 메시지를 인쇄하는 생성자 및 소멸자와 메시지를 인쇄하는 멤버 함수 doSomething()이 있는 간단한 클래스 MyClass를 정의합니다. 그런 다음 새 MyClass 개체에 대한 std::unique_ptr<MyClass> 스마트 포인터를 만들고 -> 연산자를 사용하여 개체에서 doSomething()을 호출합니다. 포인터가 범위를 벗어나면 MyClass 개체가 자동으로 삭제됩니다.
'개발자 이야기' 카테고리의 다른 글
C#에서 값 유형과 참조 유형의 차이점을 설명할 수 있습니까? (0) | 2023.03.20 |
---|---|
c# null 조건부 연산자 "?" (0) | 2023.03.18 |
프로그래밍 언어, 게임개발 언어 (0) | 2023.03.17 |
게임 개발자의 미래 (1) | 2023.03.17 |
게임엔진 비교( unity, unreal ) (0) | 2023.03.17 |