std::make_unique 사용해서 다이얼로그를 생성하면 DoModal() 를 한 번만 사용해야한다.
실수로 두 번사용하게 된다면 에러가 발생한다.
이유는 std::make_unique를 사용해서 생성된 다이얼로그 객체는 DoModal()이 호출될 때마다 파괴되기 때문이다.
std::make_unique로 생성된 std::unique_ptr는 DoModal() 호출 후 객체의 생명주기가 끝나면서 자동으로 객체를 파괴하게 된다고 한다.
그래서 DoModal를 두 번 호출하면 두 번째 호출 시 다이얼로그의 컨트롤 변수 같은 것들이 NULL로초기화 되기 때문에 에러가 발생할 수 있다.
std::make_unique는 C++11부터 도입된 스마트 포인터인 std::unique_ptr를 생성하는 데 사용되는 유틸리티 함수
std::unique_ptr는 자동으로 소유권을 관리하는 스마트 포인터로, 가리키는 객체의 소유권을 독점하며, 더 이상 사용되지 않을 때 자동으로 메모리를 해제해 준다.
-> 메모리 누수 방지.
class MyClass {
public:
MyClass() { std::cout << "MyClass 생성됨\n"; }
~MyClass() { std::cout << "MyClass 소멸됨\n"; }
void DoSomething() { std::cout << "Do Something.\n"; }
};
int main() {
// std::make_unique를 사용하여 unique_ptr 생성
auto ptr = std::make_unique<MyClass>();
// 포인터를 사용하여 클래스의 멤버 함수 호출
ptr->DoSomething();
// MyClass 객체는 main 함수가 종료될 때 자동으로 소멸.
return 0;
}
delete 를 할 필요가 없어진다.