タグ

2012年2月18日のブックマーク (12件)

  • Exception handling - The Pokémon way

    chezou
    chezou 2012/02/18
    こんなんあるんだ…。確かにポケモンの代わりに例外捕まえるもんな…。
  • GoogleTest + Hudson (Jenkins) な環境作り | ASR's hive

    この週末は、splintpmccabeとは別に、C++環境の調査もしていました。 ユニットテストフレームワークとして、5年前にはCppUnitを使っていましたが、今なら何が良いのでしょうね。 1. GoogleTest導入 使ってみないとわかりませんので、試しにGoogleTestを入れてみました。 v1.5.0です。 インストール時に困るところは特にありませんでした。 解凍 → ./configure → make → make check → sudo make install 1.1. お試し まずはmainを用意します。 testmain.cpp [cpp]#include int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS()

    chezou
    chezou 2012/02/18
    google testくらいは試してみるか
  • ある程度経験を積んだC++プログラマは絶対にvirtualデストラクタのないクラスを継承しない? - 神様なんて信じない僕らのために

    ある程度経験を積んだC++プログラマは絶対にvirtualデストラクタのないクラスを継承しない C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ はよくある間違い。あるいはC++初心者の勘違い。 継承する可能性のあるクラスにはすべてvirtualデストラクタを作る C++では基底クラスにvirtualデストラクタを書こう - *「ふっかつのじゅもんがちがいます。」withぬこ ということが否定されていることは言われるようにEffective C++を読んでいればわかること。 C++では、コピー不可にするために以下のようなクラスを書いたりするが、 (コピーコンストラクタとコピー代入演算子を無効にする) class Uncopyable { protected: Uncopyable() {} ~ Uncopyable() {}

    ある程度経験を積んだC++プログラマは絶対にvirtualデストラクタのないクラスを継承しない? - 神様なんて信じない僕らのために
  • shared_ptrを使おう - ...ing logging 4.0

    当然だがほとんどの後輩がshared_ptrを知らないみたいなので,いつかC++講座で使うための説明用資料としてここに書いておく. 概要 shared_ptrを使うとnewして作成したオブジェクトを明示的にdeleteしなくてもよくなる. 原理的に,どこからも参照されなくなったオブジェクトにアクセスする方法は存在しないので,そのオブジェクトはもう破壊してしまっても問題がない. shared_ptrは,オブジェクトが参照されている数をカウントしておいて(参照カウントと言う),参照カウントがゼロになるときに参照先のオブジェクトを1回だけdeleteしてくれる. shared_ptrはauto_ptrと同じスマートポインタの一種であり,次期C++の標準ライブラリに導入される.それと同時にauto_ptrは非推奨となる. サンプル 環境はSP1を適用済みのVS2008. VS2008SP1を入れて

    shared_ptrを使おう - ...ing logging 4.0
  • 6-6. C++デストラクタによる安全な資源解放

    <body> </body>

    chezou
    chezou 2012/02/18
    例外安全の方法。一つの方法として。
  • 1. boost::weak_ptrを利用するケース|オブジェクトの広場

    1.スマートポインタとは? boost::weak_ptrを利用するケースについてお話しする前に、まず、スマートポインタについての概要をおはなしする必要があります。なぜなら、boost::weak_ptrは、(ちょっと特殊な)スマートポインタの一種だからです。 スマートポインタとは、賢い(スマートな)ポインタという名前の由来からも想像できるかと思いますが、指し示すオブジェクトの後始末を自動化してくれる、ポインタのように振る舞うクラステンプレートのことです。 プログラミング言語C++では、メモリや各種ハンドルなどのリソースの管理にスマートポインタを利用します。スマートポインタを用いることで、リソースの解放が自動化され、リソースリーク問題を防ぐことができます。 残念ながら、現在のC++C++03)標準では、汎用的に利用できるスマートポインタが提供されていません(std::auto_ptrが提

  • [C++]例外安全、new について

    C++ では new をすると、operator new, operator delete でも実装していない限りは、必ず delete をする必要があります。 // 例外安全でないプログラム Hoge* pHoge = new Hoge(); // pHoge を使ってごにょごにょする ... delete pHoge; 普通に new をして領域を確保し、必要が無くなれば delete をするだけのプログラムです。 が、これだけでは必ず delete が出来るという保証はないのです。 これは例外について対処が出来ていなくて、pHoge を使っている途中に例外が発生した場合、pHoge は解放される機会を失い、メモリリークを引き起こします。 なので、次のように書く必要があります。 // 例外安全なプログラム Hoge* pHoge = new Hoge(); try { // pHoge

    chezou
    chezou 2012/02/18
    shared_ptrも癖を知らないといけないのね。しかし、人のモジュール叩く時の例外安全は考えないといけないなー
  • STLプログラミング・メモ

    [ C++で開発 ] STLプログラミング・ノート STLを使いこなすためのノートです。STLは機能豊富で汎用的なライブラリ集ですが、使いこなすには難易度が少々高いので、あらかじめ勉強が欠かせません コンテナの要素にポインタを入れたい ポリモーフィズムを活用するためのコンテナ格納法 オブジェクト指向プログラマーがぶつかるSTLの壁の1つです。 オブジェクト指向プログラミングをする以上、アプリケーションプログラムを書く際にはクラスをいくつも定義します。ポリモーフィズムを活用するため継承を使います。しかし、STLのコンテナにオブジェクトを入れようとして、はたと悩みます。世の中のSTLのサンプルは、コンテナに値をコピーで格納します。コピーだと、ポリモーフィズムが使えません。困った・・・ ポインタをコンテナの要素に そこで、苦肉の策としてコンテナにポインタを格納することにします。 #include

  • 一人で作る!Webサービスに必要な知識とか能力 - ゆーすけべー日記

    作りたいものが決まったら調査をしましょう。特に技術的なことについてです。 ここで言う技術というのは、「自分が作りたいことが世の中の利用可能な技術で実現できるか?」を意味します。 その際に「自分のスキル」と「世の中の技術」を分けて考えるといいでしょう。 アイデアを実現するために「利用可能な技術が無い」ケースはあきらめればいいですし、 「あるけれども自分にスキルがない」ケースは頑張ればいいのです。 設計は紙に書いちゃうくらい簡素なもので最初はいいかもです。個人個人のスタイルがあるので。 ユースケースという「ユーザーがシステムに対して振る舞う行為」を図にすることと、 扱うデータには何があるのかを列挙して構造化することは最低限行います。 2. 開発 いよいよ開発です。PerlPythonRubyPHP... 何を使うにしろ以下の知識が必要になると思います。 言語に対する理解 WAF DB

    一人で作る!Webサービスに必要な知識とか能力 - ゆーすけべー日記
  • 頻度計数における unordered_map の調整(C++) - やた@はてな日記

    形態素の頻度をカウントするというシンプルなタスクで std::tr1::unordered_map の性能について実験してみました.std::string より const char * の方がメモリを節約できるというような軽い内容です. 実験概要 実験環境は以下のとおりです. 実験環境 CPU:Core 2 Duo U9600 1.60GHz コンパイラ:gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 入力として使用したのは,ウェブコーパスから抽出した形態素を改行区切りで保存したファイルです. 入力 サイズ:815,793,701 bytes 形態素数:133,940,786 異なり数:516,612 形態素の入力については,std::ios::sync_with_stdio(false) を呼び出した後で std::getline() を使うようにし

    頻度計数における unordered_map の調整(C++) - やた@はてな日記
  • Ruby の yield って結局なんなの? - YNote

    yield って、いまいち分かりにくいですよね。。 わからない⇒調べる⇒忘れる⇒調べる⇒忘れる⇒… のエンドレスループから抜け出すために、自分なりにまとめることにしました。 ブロック いきなり yield じゃないやん!という感じですが、我慢して見てみてください。 …じ・つ・は、Ruby のメソッドはすべて「ブロック」を引数にすることができます。 最近知りました(;ω;)。 def hogehoge( x ) return x + 2 end p hogehoge( 3 ) p hogehoge( 5 ){ p "foo" } ブロックってのは、{ p "foo" } みたいに "{" と "}" に囲まれたやつね。"do" 〜 "end" でもいいみたいだけど。 これを実行すると、 5 7 となります。{ p "foo" } はまるっきりシカトです。 (・∀・) …が、以下のようにすると

    chezou
    chezou 2012/02/18
  • デブサミで僕が話したことの簡単なまとめ - 宇宙行きたい

    デブサミが 10 周年でした。 残念ながらオファーなかったのですが、一昨日くらいに急に参加していいよって言われたので 「From Legacy to Agile 〜レガシー開発からアジャイル開発へ〜」に乱入してきました。 そこでチームビルディング的な話を話させてもらいました。 資料とか特に作っていなかったので僕がリーダーとしてチームメンバーにお願いしている決まり的なことを簡単にまとめておこうと思います。 テストを書け 問題を根性で解決するな 人を殺す以外なら何やってもいい 失敗を引きずるな 個別に補足書いて行きます。 一応状況の簡単な説明をしておくと、最初は 3 人しかいないチームに 「手伝ってくれないか?」と言われ合流しました。その後、僕がリーダーになり 今は 15 人前後のチームで動いています。 テストを書け これは僕がチームに入るときに最初に宣言しました。 「テストを書かないようなプ

    デブサミで僕が話したことの簡単なまとめ - 宇宙行きたい
    chezou
    chezou 2012/02/18
    こんなリーダー羨ましい!Jenkins試すかなー。