タグ

ブックマーク / blog.cryolite.net (5)

  • C++0x Memory Model 第1回 - 1.9 Program execution - Cry’s Diary

    前回の記事:C++0x Memory Model 第0回 - メモリモデルとは何か 以下では, C++0x プログラミング言語の標準規格として一貫して N3225 を参照しています.文中で (1.9/12) などという表現が出てきた場合は N3225 における条項を指しています. 太字かつ斜字体の言葉 は N3225 で C++0x で定義される用語, 太字の言葉 はブログエントリ中で特別な意味を持たせた用語として定義しているものです. 第1回目のこの記事では,まず,ただ1つの 実行スレッド thread of execution だけを考慮した場合のメモリモデルに関わる基的な事項を説明していきます.複数スレッドが存在する状況下でのメモリモデルに関する説明する上で,単一の実行スレッド内に限定した場合の状況を把握しておくことは必要不可欠なのです. 第0回において,プログラム中にただ1つの

    C++0x Memory Model 第1回 - 1.9 Program execution - Cry’s Diary
    rydot
    rydot 2018/07/14
  • C++0x Memory Model 第0回 - メモリモデルとは何か

    私は,スカートを履いた女の子に,スカートを履いたままぱんつを脱いで,脱ぎ終わったら右手を挙げるようにと,そう命令した.私は,その子が右手を挙げたのを確かに見た.だが,その子のスカートをめくってみたらぱんつはまだそこにあったのだ! - http://twitter.com/Cryolite/status/8455287843 より一部改変 これは C++ advent calendar の参加記事です。 ブログエントリは,以降のブログエントリと合わせて, C++0x のメモリモデルに関する規則を具体的な例や意味付けを交えた形で説明していくことを目的としています. 1998年に制定され,2003年に改訂された現行の C++ プログラミング言語標準規格 (以下, C++03) においては,プログラム中にただ1つの実行スレッドしか存在しない場合の規定しか記述されていませんでした*1.しかし, C

    C++0x Memory Model 第0回 - メモリモデルとは何か
    rydot
    rydot 2018/07/14
  • 関数へのポインタによるコールバックをインライン化する - Cry's Blog

    関数ポインタとコールバックとインライン化と C++,特にSTLではコールバックにファンクタを使用することが推奨されています.コールバックにファンクタを用いることの利点は大きく次の2つだと思われます. コールバックがインライン化される(ただしあくまで「かも知れない」) 各種のアダプタを適用できる 以下では主に前者について,関数ポインタを用いたコールバックをインライン化できないかを考えます. そもそも,インライン化したい関数というのは短い簡潔な関数のはずで,そういった関数のインライン化のためだけにstructごにょごにょ,operator()うにゃうにゃとやるというのは面倒だなぁ,関数ぺぺっと書きたいな,というモチベーションは十分にありえるかと思われます. さて,関数ポインタ経由での関数呼び出しは通常インライン化されないと考えられます.これは関数ポインタ経由の場合,実行時まで呼び出す関数のアド

    関数へのポインタによるコールバックをインライン化する - Cry's Blog
  • 2004-06-05

    CRTPについてちまちま書いていたのをまとめてみました. CRTP(Curiously Reccursive/Reccuring Template Pattern)とは以下のように基底クラスのテンプレート引数として自分自身を代入するテクニックのことを指します. template class Base{/*.....*/}; class C : public Base{/*.....*/}; よく見かけるパターンなので,これがどういう使われ方をしているかを適当にまとめてみました. あるクラスの機能の一部を変えてコードの再利用を行う場合,変えたい機能を提供するメンバ関数を仮想関数にしてそれを派生クラスでオーバーライドするのが通常の方法ですが,CRTPを使えば仮想関数を用いずに行うことができます. 自分で何か良さそうな例を書こうと思ったのですが,あんまり適切な例が思い浮かばないので,このCRTP

    2004-06-05
    rydot
    rydot 2010/04/17
  • 動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary

    boost::shared_ptr は動的削除子 (dynamic deleter) と呼ばれる技法に基づいて実装されています.この動的削除子という技法で重要なのは, boost::shared_ptr が最終的に呼び出す解放処理が boost::shared_ptr のテンプレート引数の型に関係なく,コンストラクタに実際に渡されたポインタの型で,かつ boost::shared_ptr のコンストラクタの呼び出しの段階で 決定する,ということです. 以下のようなコードが,動的削除子の効果が一番分かりやすい例になるでしょう. class X{ public: ~X() { std::cout << "X::~X" << std::endl; } }; class B{ public: ~B() // virtual でないことに注意!! { std::cout << "B::~B" <<

    動的削除子 (dynamic deleter) - 意外と知られていない? boost::shared_ptr の側面 - Cry’s Diary
    rydot
    rydot 2010/04/16
  • 1