C++에는 필요하지 않으므로 finally
블록이 없습니다. 그것은 훨씬 더 나은 것을 가지고 있습니다 : 소멸자.
클래스 유형 객체에는 인스턴스가 존재하지 않을 때 해당 클래스 유형 객체의 인스턴스에 대해 호출되는 소멸자가있을 수 있습니다. "자동 스토리지 지속 기간"이라고 불리는 로컬 변수는 선언 된 블록의 끝에 존재하지 않습니다.
따라서 자원을 관리하는 데 소멸자를 사용해야합니다. 동적으로 할당 된 객체를 파괴하기 위해 블록 끝에 delete
표현식을 작성하는 대신 스마트 포인터를 사용하여 객체의 수명을 관리해야합니다. 예를 들어, 예제 프로그램에서 다음 줄을 고려하는 당신은 연결하는 :
{
sql::Connection* con;
// ...
con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
// ...
delete con;
}
이 대신 쓸 수로 :
{
// ...
std::unique_ptr<sql::Connection> con(
driver->connect("tcp://127.0.0.1:3306", "root", "root"));
// ...
} // con is automatically deleted here, even if an exception is thrown.
(당신이 이전 컴파일러 또는 C++ 표준 라이브러리 구현을 사용하는 경우 std::unique_ptr
을 가지고 있지 않거나 사용할 수 없으면 std::auto_ptr
을이 특정 사례에 사용할 수 있습니다.
여기에서 연결 개체의 수명은 자동으로 관리되므로 d를 기억할 필요가 없습니다. 예외를 던지면 특별한 정리를 수행하는 것에 대해 걱정할 필요가 없습니다. std::unique_ptr
소멸자는 연결 개체가 파괴되었는지 확인합니다.
소멸자를 사용하여 리소스 정리를 수행하는이 기술은 RAII (Resource Acquisition Is Initialization)이며 C++에서 일관되게 사용하고 이해하는 데 가장 중요한 관용구입니다. 리소스를 올바르게 관리하기는 어렵습니다. }
이 당신을 위해 모든 노력을 기울일 때 훨씬 쉬워졌습니다.
와우, 예외 처리와 관련하여 링크의 예제 코드가 너무 잘못되었습니다. 금지되어야합니다. – Frunsi