Monthly Archives

Home >2005年09月

2005-09

スポンサーサイト
...
----- | スポンサー広告
デストラクタからの例外送出
 デストラクタから例外を送出するような設計や実装は、いかなる事情があろうとも、決して行ってはいけません。デストラクタから例外を送出する可能性があるプログラムは信頼性とは無縁です。 では、なぜデストラクタから例外を送出してはいけないのでしょうか?一つの理由は、コンパイラ自体がデストラクタから例外が送出されることを前提として実装されていない場合があるからです。もう一つの理由は、ライブラリがデストラクタ......
09-29 | 実装技術 | Comment : 0  | Trackback : 1 
volatileによる多重定義
 μITRONのようなマルチタスク環境でC++を使う場合、静的なオブジェクトの操作や、クラスのメンバ変数の操作では排他制御が必要になることが多いと思います。しかし、参照やポインタを引数として受け取る関数や、クラスのメンバ関数を、何でもかんでも排他制御しようとすると、大きなオーバーヘッドになってしまいます。そんなとき、volatile修飾子による多重定義が役に立ちます。volatile修飾子は、構文上はconst修飾子と対等の関......
09-25 | 実装技術 | Comment : 0  | Trackback : 0 
関数の引数としての配列
 Cでは、関数の引数として配列を渡すと、暗黙のうちにポインタに変換されてしまうため、配列の大きさ(要素数)も一緒に渡したい場合は、別の引数を用意しなければなりませんでした。C++でも基本的には同じなのですが、これから紹介するテクニックを用いることで、この問題を解消することが出来ます。話を分かりやすくするために、配列の大きさを渡さないために問題を起こす代表格であるgets関数を改良してみることにします。次の......
09-23 | より良いC | Comment : 3  | Trackback : 1 
非局所オブジェクトの初期化
 今回は、非局所オブジェクト、すなわち関数の外で宣言されたオブジェクトの初期化についてです。クラスの静的データメンバも、ここでいう非局所オブジェクトの範疇に含まれます。以前はCで開発されていた方が、比較的最初のうちに戸惑うのも、この非局所オブジェクトの初期化ではないでしょうか?非局所オブジェクトの初期化は、main関数のようなエントリポイントが呼び出される前に行われます。すなわち、非局所オブジェクトの......
09-23 | 実装技術 | Comment : 0  | Trackback : 0 
静的アサーション
 関数の引数の正当性は、可能な限り確認した方が、信頼性の高いプログラムになることはいうまでもありません。しかし、引数の確認に伴うオーバーヘッドも馬鹿にならないため、デバッグ時のみ確認を行うようにし、最終出荷時には確認を省略することがよくあります。そんなときに役立つのがおなじみのassertマクロ*1です。さて、Cの場合には、引数といえば関数ぐらいしかない(厳密には関数形式マクロもある)わけですが、C++には、......
09-21 | 実装技術 | Comment : 2  | Trackback : 0 
派生できないクラス
 派生できないクラスについては、「仮想デストラクタの是非」でも取り上げましたが、ここではもう少し詳しく見ていきたいと思います。そもそも、派生できないクラスを使えば何が便利なのでしょうか?派生されないことが保証されていることで、クラスの実装を簡略化できることができますし、場合によっては積極的に効率を向上することができます。そのクラスが派生されないことが保証されていれば、仮想デストラクタを定義する必要......
09-19 | 実装技術 | Comment : 0  | Trackback : 0 
タイムアウト付きのnew
 C++に標準的に備わっているnew演算子は、メモリの割り付けに失敗するとstd::set_new_handlerで設定したハンドラ関数が呼び出され、それでもまだ失敗する場合にはstd:bad_alloc例外が送出されます。マルチタスク環境では、あるタスクでメモリの割り付けが失敗したとしても、その後、他のタスクでメモリの解放が行われれば、再びメモリの割り付けができるようになる可能性があります。そこで、今回はnew演算子にタイムアウト機能を......
09-17 | 実装技術 | Comment : 0  | Trackback : 0 
スマートポインタ
 久々の更新になりますが、今回はスマートポインタを取り上げてみたいと思います。スマートポインタというのは、気の利いた(スマートな)ポインタのことです。スマートポインタの何がスマートなのかを語る前に、ポインタについて、少しおさらいをしおきたいと思います。ポインタには、主に次の三つの用法があると思います。オブジェクトを参照する。配列等の要素を順にアクセスする。動的に生成したオブジェクトを管理する。この......
09-02 | 実装技術 | Comment : 4  | Trackback : 0 

C++と組み込み環境 | Page Top▲

Navigation
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。