ピアソンが丸善になったりで、現在C++ in-Depthシリーズは入手困難ですが、大学の図書館にあったので読みました。全然知らなかったことや、逆にC++11/14 だとこう書けるかなという部分もあると思ったので少しメモします。

項目37 : AUTO_PTR

std::auto_ptr<T> を使うように書かれていますが、非推奨なのでやめましょう。現在ではもっと良いスマートポインタが用意されています。例えば本文中で紹介されるPimplへのポインタにはコピーを禁止するstd::unique_ptr<T>を使います。

他にも本文では、コピーや代入を回避する強い例外安全なテクニックとしてスマートポインタを用いた動的確保を推奨しています。

#include <memory>
#include <iostream>

auto f() noexcept
{
    std::unique_ptr<std::string> result(new std::string("hoge"));
    std::cout << "aaa";
    return result;
}

C++ の設計と進化

「例外処理」の目的や(理想的な)実装は上記の本が詳しい。これも絶版なのが残念。常にC言語や過去のC++との互換性に悩まされてきた歴史が面白い。