2010/05/26 (水) 00:43:00 ◆ ▼ ◇ [qwerty]void functionD() // 3つの資源を同時に使う
{
FILE_HANDLE fh = OpenFile("some-file");
if (fh != INVALID_HANDLE) {
stlsoft::scoped_handle<FILE_HANDLE> cleanup(log, CloseFile, INVALID_HANDLE); // ファイルハンドルを「安全」にする
SOCKET_HANDLE sk = OpenSocket("service-host");
if (sk != INVALID_SOCKET_HANDLE) {
stlsoft::scoped_handle<SOCKET_HANDLE> cleanup2(sk, CloseSocket, INVALID_SOCKET_HANDLE); // ソケットを「安全」にする
void *mem = malloc(10000);
if(NULL != mem) {
stlsoft::scoped_handle<void*> cleanup3(mem, free); // メモリが確実に解放されるようにする
// ここでメモリとソケットとファイルハンドルを使う。
} // 'mem'はここで解放される。
// ソケットを自動的な管理から切り離す。
SOCKET_HANDLE sk2 = cleanup2.detach();
} // 'sk'はcleanup2から切り離されたので、ここでは閉じられない。
cleanup.close(); // 早期に'fh'の資源を返却する。
} // 'fh'の資源は既に返却されているので、ここでは返却されない。
}