Nov17th

C++ のバックアップ(No.3)

Top / C++


まとめ

  • スマートポインタ版Singleton(boost::shared_ptrの場合)
    • GetInstance():自身を指すポインタでreset()を呼び、新しいインスタンスを割り当ててから返す
    • privateデストラクタで解放処理
  • std::vector領域確保関連
    • http://dvdm.blog134.fc2.com/blog-entry-62.html
    • resize()
      領域確保+オブジェクト生成
    • reserve()
      領域確保
    • size()
      オブジェクトとして初期化されている個数
    • capacity()
      領域確保されている数
      これ以上にpush_back()しようとすると領域を取りに行く(現在の2倍)ため処理時間がかかる
  • ラムダ式
    [変数キャプチャ](引数){処理コード}
    関数オブジェクト。autoで受けられる
    戻り値はreturn文の型になる


メモ

  • Singletonクラスの継承は(基本的に)できない
  • virtualなデストラクタを持たないクラスを継承してはいけない
  • stringstreamの文字列リセットはss.str("")
  • VC++ではtemplateの実装をヘッダに書かなくてはならない
  • std::string::size()とstd::string::length()の動作に差はない
  • スーパークラスのコンストラクタの明示的呼び出しは初期化子を使って行う
  • namespaceブロックでtypedefされた型名は、その空間内扱いになる
  • メンバ関数にデフォルトパラメータを与えるのは宣言時のみ


未解決問題

  • Singletonの継承
  • boost::shared_ptr<T>のPtr<T>への隠蔽(?) [#ze8ea4bf]
    • 基本
      • templateのtypedefはできない
    • defineの場合
      • 名前空間抜ける
      • 変数宣言時にエラー
    • 継承の場合
      • コンストラクタによる動作が制限
      • privateデストラクタが呼べない⇒Singleton時に困る

リンク