過去ログ - プログラミングしよう。0x0C
1- 20
33:名無しのパー速民[sage]
2013/08/27(火) 21:50:17.35 ID:oVqTQFuxo
フリーランスは技術よりコネだってばっちゃが


34:名無しのパー速民
2013/08/27(火) 22:32:42.20 ID:TMilLm0Qo
よく使うC++のイディオム 「NVI」と「RAII」
codezine.jp

これってどうなん?


35:以下、VIPにかわりましてパー速民がお送りします(千葉県)[sage]
2013/08/27(火) 23:07:13.62 ID:z9YnTLP5o
NVIはこの名称では初めて聞くが有名なイディオム
自分は仮想関数は出来るだけ使わないので良く分からんが十分有用だと思う
RAIIはネ申、C++をC++と特徴づける要素の一つといっても過言でない
リソースの初期化をコンストラクタ、解放をデストラクタで行う事によって効率を落とさず例外安全性と記述の点での利便性を得られる


36:以下、VIPにかわりましてパー速民がお送りします(大阪府)[sage]
2013/08/27(火) 23:51:07.32 ID:i5GE9DVzo
>>34
NVIを使えばオーバーライドを禁止でき、メソッドの多重定義を防げる Javaでいうfinal、C#でいうsealed
RAIIはC#のusingみたいにスコープの前後に確実に特定の処理をやってくれる

という理解でおk?


37:以下、VIPにかわりましてパー速民がお送りします(大阪府)[sage]
2013/08/27(火) 23:52:41.12 ID:i5GE9DVzo
>>35
便利さはネ申だけど、初期化と解放のためだけに不要なインスタンスができるのが気持ち悪い


38:以下、VIPにかわりましてパー速民がお送りします(千葉県)[sage]
2013/08/28(水) 00:04:24.36 ID:R2QrTIk3o
>>36-37
外部に公開したいインターフェイスと内部実装として提供される仮想関数は時として異なることがあり(そしてソースに変更を加えるほど異なりやすい)、その際を吸収するのがNVI
特にオーバーライド禁止の意図は無い
RAIIは便利なだけでなく、安全である(例外が発生しても確実に実行されるため)
それに適切なファクトリ関数とラッパーを使用すればC時代と記述を大きく変えることなくRAIIの恩恵を享受できるし、すべき(例:スマートポインタ)


39:以下、VIPにかわりましてパー速民がお送りします(静岡県)[saga]
2013/08/28(水) 00:12:12.74 ID:Wq5qDfvzo
>>37
しかし、finallyよりは確実に良い


40:以下、VIPにかわりましてパー速民がお送りします(関西地方)
2013/08/28(水) 00:15:10.32 ID:C+WjSmgxo
利便性という発言する奴にロクな奴はいないこれ豆な


41:以下、VIPにかわりましてパー速民がお送りします(大阪府)[sage]
2013/08/28(水) 00:47:47.37 ID:eEuN6kYbo
>>38
解説トンクス
NVIは今まで使ったことがないからピンとこないな。。。
とりあえずそういうものだと覚えておく
RAIIは昔嫌というほど使ったからありがたみは身にしみて分かるんだが
以下略



42:以下、VIPにかわりましてパー速民がお送りします(静岡県)[saga]
2013/08/28(水) 01:12:43.04 ID:Wq5qDfvzo
>>41
それだけじゃない
処理が長くなるほど、finallyはtryから離れてゆく
すると、初期化と解放が1:1になっている、という意味がソースコード上で薄れていってしまう
コンストラクタとデストラクタなら、まあ普通は隣に書くんでペアになってることがわかりやすい
以下略



43:以下、VIPにかわりましてパー速民がお送りします(大阪府)[sage]
2013/08/28(水) 01:17:17.38 ID:eEuN6kYbo
>>42
あるある
人間の頭の限界を考えに入れることも大事だな


1002Res/234.91 KB
↑[8] 前[4] 次[6] 板[3] 1-[1] l20
このスレッドは過去ログ倉庫に格納されています。
もう書き込みできません。




VIPサービス増築中!
携帯うpろだ|隙間うpろだ
Powered By VIPservice