堕天使の煉獄
2013-10
23
02:22:43
うーん、意外にもう戻れない感じぽ
なにげにまだちまちまPGやってたり。
vc++2008のsp1から使える様になったc++11の先取りライブラリtr1で
とりあえずregexとshared_ptrがboost無しで使える様になった~ってので
それだけで満足してたのですが。
なにげにその辺の調べ物をしてると、イヤでも他のc++11の新機能の情報も
目に入ってくるわけで。
んでも、vc++2008だと入ってないってのも多くて
結局絵に描いた餅なんですよね。
それを眺めてヨダレを垂らす感じになりそうで、なんとなく目を背けてたのですが。
と言うのも、vc++2010がかなり出来が悪いんですよね。
xpだと全体的にもっさり動作(wpfの所為)
インテリセンスが糞重い。
c++0xの対応も中途半端。
と、悪い要素が多くて。
win7マシンに買い換えてvc++2012にした方がよさげなかんじだなーと。
ところが、いつのまにやらvc++2010をXPで高速化する方法。
みたいなのが出てきてて。
「Windows Automation API 3.0」とかいうのを入れれば
速くなるらしい、と。
どうもwpf関係のxpでの描画速度が向上……(というか正常化と言うべきか?)するそうな。
入れて見ようと思ったら、なんかすでにWinUpdateですでに入ってるっぽい。
てことでvc++2010を久しぶりに起動。
相変わらず初回起動時のみ重いのはWPFの仕様だとして
起動後は確かにあの妙なもっさり感というかレスポンスの悪さは改善している模様。
が……インテリセンスがまったく出ない。
ちょっとググると、vc++2010ではc++/CLIではインテリセンスが使えないそうな。
CLIなんて使ってないんだけど??
さらにググってみると、CLIを使わない設定にすればインテリセンスが使える様に。
っていう記事もあったのだけども
一向にウンともスンとも……
他の記事では、普段は使えてるけど急に使えなくなったっていう記事が何件かHIT。
その現象はvc++2008とか昔のVCでも良くある話なのでアレなのですが
一度は使えてるのは確かな模様。
うーん。スタンダード版以上だけで、EEだと使えないとかなの??
いまさらインテリセンス無しで開発とかヤダー!
ってかんじで致命的ですよね。
が、未練がましくいろいろググってると
セキュリティ関係のアップデートパッチKB2876217を入れると
xpのvc++2010でインテリセンスが効かなくなる現象が起こる。
という2chのカキコがヒット。
しかもvc2010起動時に他のブラウザの画面とかに切り替えると
マウスカーソルがちらちらと砂時計アイコンに変る現象も症状として上がってて
もろおんなじ現象がうちでもおこってたり。
たぶんなんか裏でインテリセンスのDBテーブルみたいなの作成してるから
そんなんなんてんだろーなとかおもってたのですが
(インテリセンス使えないのにそれで使用するために
作成されるファイルは作られてるんですよね。
なのにCLI切ったら使えるという記事もあるし何で使えないんだろう? とおもてた)
したらKB2526044という上の不具合のパッチが見つかる。
んでそれ入れて見たら、インテリセンスがようやく表示されたっ!
さらに砂時計点滅の現象も消えたし。
アップデートのパッチがセキュリティ関係でなんかしてて
インテリセンスを阻害していたというファッキンな結果で
そのパッチは自動では入ってないという。
糞ファッキンMSめ……。
んでまあ、とりあえずまともにvc++2010は使える様になったり。
今のところ速度的にも以前つかってた時はもう、イライラが募ってとてもじゃないけど
継続して使うのは無理ってレベルだったのが、ほとんど気にならないレベルになってたり。
ということで、c++11の新機能を盛り込んでまた組み直しをはじめたですw
んでも、肝心のRange-base for文がvc++2012からとか、残念なところもまだあるのですが。
型推論のautoが使える様になるのは嬉しいかな。
とくにイテレータまわりで使えるのがうれしい。
vector<int>::iterator it = v.begin();
が
auto it = v.begin();
と、さくっと短いタイプで書けるのと
コンテナの中身のデータ型とかいちいち書くのもめんどくさかったんですよね。
今まではtypedefで少しでも楽を……とかちまちまやってたので。
今まで何でなかったのかの
std::unordered_map
ハッシュマップ
auto_ptrの後継
unique_ptr
shared_ptrの補助機能?
std::make_shared
あとはラムダ式と右辺値参照あたり。
有用だと思ったのはこの辺でしょうか。
とくにunique_ptrは結構つかう機会が多そうです。
今のところスマートポインタ欲しいような所はみんなshared_ptrにしてたのですが
shared_ptrは重たいというのは昔から言われていたことなので。
そんでもって、寿命が限定的であったり、コピーが行われないような
限定的な部分にまでshared_ptrは重装備すぎるので無駄が多い。
と言う部分は気になっていた所ではありましたし。
かといってauto_ptrは残念な感じので、ついに非推奨機能のレッテルを貼られるまでに。
でかわりに追加されたunique_ptr。
shared_ptrのとくに重い部分は生成の部分なのですが
それを高速化するmake_sharedなのですが
こんなかんじでつかうらしい
shared_ptr<Hoge> sp = std::make_shared<Hoge>();
通常のmake_shared使わない時は
shared_ptr<Hoge> sp(new Hoge());
こんなふうに書くのですが
この場合だと、オブジェクトの生成と参照カウント用のなんかの二回newが行われるのが
make_sharedをつかうとnewが一回ですむのだとか。
んで最初はこんなかんじ?
std::shared_ptr<Hoge> sp = std::make_shared<Hoge>(new Hoge());
とか書いてコンパイラに怒られたりしてw
std::shared_ptr<Hoge> sp = std::make_shared<Hoge>(コンストラクタの引数);
と、make_sharedのあとの()にはコンストラクタの引数を書くみたい。
なにげにtr1もそうだけど、日本語の解説サイト少なすぎ……。
その辺、c++もう過去の遺物? という空気を感じたり感じなかったり……。
んで、そこで迷ったのですが
std::make_shared<クラス名>(コンストラクタの引数);
となっているのですが、派生クラスをぶっ込むときはどうするのだ? と。
すまぽ代入時に暗黙のキャストしてくれるのだろうか??
そんでもって、
void SetHoge(Hoge* hoge){
shared_ptr<Hoge> sp(hoge);
}
なんて言う関数があって
SetHoge(new HogeMoge());
なんてやる場合(HogeMogeはHogeクラスの派生クラスだとおもいねぇ)
この場合、すでにオブジェクトはnewされた後なので
make_sharedを使う意味はないですよね。
そもそもmake_sharedの生成時にポインタを渡す事できないし。
てか生成をmake_sharedで行うことによって
newの回数へらして速度UPなのに
事前にnewしてオブジェクトを先に生成してる場合
なんのアドバンテージもないよなぁ。
そうなると、make_sharedっていつ、どういう状況で使うんだよ? とか思ったり。
基本、スマートポインタが必要なのって
オブジェクトをnewしてコンテナにぶち込んだりして
コンテナの中身を消したりしたときにdeleteも勝手にやってくれるっていうのが
よく使う事例だったりするわけで。
そんでもってその時には大抵、ファクトリパターンとかが使われるのですが
基本、生成したオブジェクトを返す形になるので
make_sharedは使うに適してないのですよね。
んでもそれ以外の用途でshared_ptrを使うところがない……。
限定的な使用(単一のスコープ内で使い捨てるようなケース)
では軽量なunique_ptrがあるわけだし。
なにげに右辺値参照と合わせ技で
コンテナに入れるのでもunique_ptrが使えるし。
その場合は、unique_ptrの定義である
複数のunique_ptrのインスタンスが同一のメモリ領域を管理することはない。
ていうので、operator=で代入することが出来ないのですけども
そのかわりc++0xで追加されたstd::move()という関数があって
右辺値を破壊してくれるものがあってそれで
インスタンスが常に一つであることが保証されてて
むしろコンテナにオブジェクトのポインタ入れてるときって
基本的にshared_ptrの弱点でもある循環参照を起こさないためにも
無闇にいろんな所にスマートポインタをコピーする事なんて
前提条件として設計的に行わないので、実際、たった一つしか存在しないっていうのは
むしろそうであって欲しい状況のが多いような気がする。
単純に、コンテナからはずしたら勝手にdeleteしてくれるっていう部分の機能だけ
あれば良くて、なおかつそれが低コストで行えれば言うこと無いわけで。
そうなると、無駄にコスト高い上に、無闇にコピー出来てしまうshared_ptrよりも
積極的にunique_ptrを使っていく方向になりそうな予感。
わりと今組み直してるところでも、
これってホントにshared_ptrである必要あるのか?
unique_ptrで十分じゃね?
っていう状況が多くて戸惑っているところだったり。
以下インターフェースをつかってコンテナに登録して、
コンテナまわしてオーバーライドされたDrawメンバ関数を読んでる例
//情報クラス登録
void SetInfo(IDxInfo *info){
unique_ptr<IDxInfo> sp(info);
INFO_LIST.push_back(move(sp));
}
void Draw(){
//情報クラスリストから描画
for_each(INFO_LIST.begin(),INFO_LIST.end(),[](const unique_ptr<IDxInfo>& p){
p->Draw();
});
}
ポインタのコピーが出来ないため
コンテナに入れた物をまわして使う場合は
参照で行う必要があるのだけども
for_eachにラムダ式と新しい機能ガツガツ使う感じになってて
なんかもう、以前のc++03とかの頃には戻れそうもないかんじぽ。
馴染んでくると便利すぎるですc++11。
そのうち、いろいろ覚え書き兼ねて
新機能まわりまとめてページにしたいところ。
日本語の解説も少ないことだし。
んでも
vc++2010のstd::to_stringが片手落ちどころじゃない欠陥実装でワラタ。
どうにもCLIにインテリセンスがないのは開発が間に合わなかったなんて話もあるし
c++0xの対応も中途半端ってところからも
vc++2010はどうにも慌てて無理に出した急場しのぎの欠陥verだという印象が
さらに強くなったり。
てか10年前にあっても普通だろto_string的な機能って。
これがstdに追加されたっても、今頃感が半端無いのですが。
なのに、中身が
long long
unsigned long long
long double
の三つの型しか受け取らないという……
ただのintも使えないとかアホかと。
んまあ、とっくに数値←→文字列みたいな汎用性の高い物は
みんな自前で作った関数使ってるか
boostのlexical_castとか使ってるので
べつに困ることも全くないとおもわれるのですが。
そんなんよりも、まともなforeachとかUNICODEとか文字コード周りとか
もっと基本的な所をしっかりとしてもらいたいところ。
vc++2008のsp1から使える様になったc++11の先取りライブラリtr1で
とりあえずregexとshared_ptrがboost無しで使える様になった~ってので
それだけで満足してたのですが。
なにげにその辺の調べ物をしてると、イヤでも他のc++11の新機能の情報も
目に入ってくるわけで。
んでも、vc++2008だと入ってないってのも多くて
結局絵に描いた餅なんですよね。
それを眺めてヨダレを垂らす感じになりそうで、なんとなく目を背けてたのですが。
と言うのも、vc++2010がかなり出来が悪いんですよね。
xpだと全体的にもっさり動作(wpfの所為)
インテリセンスが糞重い。
c++0xの対応も中途半端。
と、悪い要素が多くて。
win7マシンに買い換えてvc++2012にした方がよさげなかんじだなーと。
ところが、いつのまにやらvc++2010をXPで高速化する方法。
みたいなのが出てきてて。
「Windows Automation API 3.0」とかいうのを入れれば
速くなるらしい、と。
どうもwpf関係のxpでの描画速度が向上……(というか正常化と言うべきか?)するそうな。
入れて見ようと思ったら、なんかすでにWinUpdateですでに入ってるっぽい。
てことでvc++2010を久しぶりに起動。
相変わらず初回起動時のみ重いのはWPFの仕様だとして
起動後は確かにあの妙なもっさり感というかレスポンスの悪さは改善している模様。
が……インテリセンスがまったく出ない。
ちょっとググると、vc++2010ではc++/CLIではインテリセンスが使えないそうな。
CLIなんて使ってないんだけど??
さらにググってみると、CLIを使わない設定にすればインテリセンスが使える様に。
っていう記事もあったのだけども
一向にウンともスンとも……
他の記事では、普段は使えてるけど急に使えなくなったっていう記事が何件かHIT。
その現象はvc++2008とか昔のVCでも良くある話なのでアレなのですが
一度は使えてるのは確かな模様。
うーん。スタンダード版以上だけで、EEだと使えないとかなの??
いまさらインテリセンス無しで開発とかヤダー!
ってかんじで致命的ですよね。
が、未練がましくいろいろググってると
セキュリティ関係のアップデートパッチKB2876217を入れると
xpのvc++2010でインテリセンスが効かなくなる現象が起こる。
という2chのカキコがヒット。
しかもvc2010起動時に他のブラウザの画面とかに切り替えると
マウスカーソルがちらちらと砂時計アイコンに変る現象も症状として上がってて
もろおんなじ現象がうちでもおこってたり。
たぶんなんか裏でインテリセンスのDBテーブルみたいなの作成してるから
そんなんなんてんだろーなとかおもってたのですが
(インテリセンス使えないのにそれで使用するために
作成されるファイルは作られてるんですよね。
なのにCLI切ったら使えるという記事もあるし何で使えないんだろう? とおもてた)
したらKB2526044という上の不具合のパッチが見つかる。
んでそれ入れて見たら、インテリセンスがようやく表示されたっ!
さらに砂時計点滅の現象も消えたし。
アップデートのパッチがセキュリティ関係でなんかしてて
インテリセンスを阻害していたというファッキンな結果で
そのパッチは自動では入ってないという。
糞ファッキンMSめ……。
んでまあ、とりあえずまともにvc++2010は使える様になったり。
今のところ速度的にも以前つかってた時はもう、イライラが募ってとてもじゃないけど
継続して使うのは無理ってレベルだったのが、ほとんど気にならないレベルになってたり。
ということで、c++11の新機能を盛り込んでまた組み直しをはじめたですw
んでも、肝心のRange-base for文がvc++2012からとか、残念なところもまだあるのですが。
型推論のautoが使える様になるのは嬉しいかな。
とくにイテレータまわりで使えるのがうれしい。
vector<int>::iterator it = v.begin();
が
auto it = v.begin();
と、さくっと短いタイプで書けるのと
コンテナの中身のデータ型とかいちいち書くのもめんどくさかったんですよね。
今まではtypedefで少しでも楽を……とかちまちまやってたので。
今まで何でなかったのかの
std::unordered_map
ハッシュマップ
auto_ptrの後継
unique_ptr
shared_ptrの補助機能?
std::make_shared
あとはラムダ式と右辺値参照あたり。
有用だと思ったのはこの辺でしょうか。
とくにunique_ptrは結構つかう機会が多そうです。
今のところスマートポインタ欲しいような所はみんなshared_ptrにしてたのですが
shared_ptrは重たいというのは昔から言われていたことなので。
そんでもって、寿命が限定的であったり、コピーが行われないような
限定的な部分にまでshared_ptrは重装備すぎるので無駄が多い。
と言う部分は気になっていた所ではありましたし。
かといってauto_ptrは残念な感じので、ついに非推奨機能のレッテルを貼られるまでに。
でかわりに追加されたunique_ptr。
shared_ptrのとくに重い部分は生成の部分なのですが
それを高速化するmake_sharedなのですが
こんなかんじでつかうらしい
shared_ptr<Hoge> sp = std::make_shared<Hoge>();
通常のmake_shared使わない時は
shared_ptr<Hoge> sp(new Hoge());
こんなふうに書くのですが
この場合だと、オブジェクトの生成と参照カウント用のなんかの二回newが行われるのが
make_sharedをつかうとnewが一回ですむのだとか。
んで最初はこんなかんじ?
std::shared_ptr<Hoge> sp = std::make_shared<Hoge>(new Hoge());
とか書いてコンパイラに怒られたりしてw
std::shared_ptr<Hoge> sp = std::make_shared<Hoge>(コンストラクタの引数);
と、make_sharedのあとの()にはコンストラクタの引数を書くみたい。
なにげにtr1もそうだけど、日本語の解説サイト少なすぎ……。
その辺、c++もう過去の遺物? という空気を感じたり感じなかったり……。
んで、そこで迷ったのですが
std::make_shared<クラス名>(コンストラクタの引数);
となっているのですが、派生クラスをぶっ込むときはどうするのだ? と。
すまぽ代入時に暗黙のキャストしてくれるのだろうか??
そんでもって、
void SetHoge(Hoge* hoge){
shared_ptr<Hoge> sp(hoge);
}
なんて言う関数があって
SetHoge(new HogeMoge());
なんてやる場合(HogeMogeはHogeクラスの派生クラスだとおもいねぇ)
この場合、すでにオブジェクトはnewされた後なので
make_sharedを使う意味はないですよね。
そもそもmake_sharedの生成時にポインタを渡す事できないし。
てか生成をmake_sharedで行うことによって
newの回数へらして速度UPなのに
事前にnewしてオブジェクトを先に生成してる場合
なんのアドバンテージもないよなぁ。
そうなると、make_sharedっていつ、どういう状況で使うんだよ? とか思ったり。
基本、スマートポインタが必要なのって
オブジェクトをnewしてコンテナにぶち込んだりして
コンテナの中身を消したりしたときにdeleteも勝手にやってくれるっていうのが
よく使う事例だったりするわけで。
そんでもってその時には大抵、ファクトリパターンとかが使われるのですが
基本、生成したオブジェクトを返す形になるので
make_sharedは使うに適してないのですよね。
んでもそれ以外の用途でshared_ptrを使うところがない……。
限定的な使用(単一のスコープ内で使い捨てるようなケース)
では軽量なunique_ptrがあるわけだし。
なにげに右辺値参照と合わせ技で
コンテナに入れるのでもunique_ptrが使えるし。
その場合は、unique_ptrの定義である
複数のunique_ptrのインスタンスが同一のメモリ領域を管理することはない。
ていうので、operator=で代入することが出来ないのですけども
そのかわりc++0xで追加されたstd::move()という関数があって
右辺値を破壊してくれるものがあってそれで
インスタンスが常に一つであることが保証されてて
むしろコンテナにオブジェクトのポインタ入れてるときって
基本的にshared_ptrの弱点でもある循環参照を起こさないためにも
無闇にいろんな所にスマートポインタをコピーする事なんて
前提条件として設計的に行わないので、実際、たった一つしか存在しないっていうのは
むしろそうであって欲しい状況のが多いような気がする。
単純に、コンテナからはずしたら勝手にdeleteしてくれるっていう部分の機能だけ
あれば良くて、なおかつそれが低コストで行えれば言うこと無いわけで。
そうなると、無駄にコスト高い上に、無闇にコピー出来てしまうshared_ptrよりも
積極的にunique_ptrを使っていく方向になりそうな予感。
わりと今組み直してるところでも、
これってホントにshared_ptrである必要あるのか?
unique_ptrで十分じゃね?
っていう状況が多くて戸惑っているところだったり。
以下インターフェースをつかってコンテナに登録して、
コンテナまわしてオーバーライドされたDrawメンバ関数を読んでる例
//情報クラス登録
void SetInfo(IDxInfo *info){
unique_ptr<IDxInfo> sp(info);
INFO_LIST.push_back(move(sp));
}
void Draw(){
//情報クラスリストから描画
for_each(INFO_LIST.begin(),INFO_LIST.end(),[](const unique_ptr<IDxInfo>& p){
p->Draw();
});
}
ポインタのコピーが出来ないため
コンテナに入れた物をまわして使う場合は
参照で行う必要があるのだけども
for_eachにラムダ式と新しい機能ガツガツ使う感じになってて
なんかもう、以前のc++03とかの頃には戻れそうもないかんじぽ。
馴染んでくると便利すぎるですc++11。
そのうち、いろいろ覚え書き兼ねて
新機能まわりまとめてページにしたいところ。
日本語の解説も少ないことだし。
んでも
vc++2010のstd::to_stringが片手落ちどころじゃない欠陥実装でワラタ。
どうにもCLIにインテリセンスがないのは開発が間に合わなかったなんて話もあるし
c++0xの対応も中途半端ってところからも
vc++2010はどうにも慌てて無理に出した急場しのぎの欠陥verだという印象が
さらに強くなったり。
てか10年前にあっても普通だろto_string的な機能って。
これがstdに追加されたっても、今頃感が半端無いのですが。
なのに、中身が
long long
unsigned long long
long double
の三つの型しか受け取らないという……
ただのintも使えないとかアホかと。
んまあ、とっくに数値←→文字列みたいな汎用性の高い物は
みんな自前で作った関数使ってるか
boostのlexical_castとか使ってるので
べつに困ることも全くないとおもわれるのですが。
そんなんよりも、まともなforeachとかUNICODEとか文字コード周りとか
もっと基本的な所をしっかりとしてもらいたいところ。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
04
05
06
07
08
09
■
■
変な夢みるし…
10
11
12
13
■
■
寒っ
14
[体育の日]
15
16
17
18
19
20
21
22
23
■
■
うーん、意外にもう戻れない感じぽ
24
25
26
27
28
29
30
31
total:2081283 t:43 y:214
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp