C++相談室 part20

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:03/07/07 17:28
>>947
いいえ。
Virgin virtual function
>>947
C++ 規格書 10.4.2 より抜粋
A class is abstract if it has at least one pure virtual function.
954デフォルトの名無しさん:03/07/07 20:37
>>943
参照カウントのロックのコストがかかるのは確かだけど、
毎回コピーするより重くなるの?
mallocだってそれなりのロックが必要だし。
955v(^・^)v:03/07/07 20:39
じゃあ次スレたててくるか
956名無し@沢山:03/07/07 20:44
>>954
おまいらよ、stringの毎回コピーするような実装では何文字以下は
フリーストア領域を使わないような実装になっているものだよ。
おまいらよ、つまりmallocは使わないんだよ。
代わりにcallocを使うだけだけどな。
958名無し@沢山:03/07/07 20:57
>>957
>代わりにcallocを使うだけだけどな。
>>代わりにcallocを使うだけだけどな。
>>>代わりにcallocを使うだけだけどな。
>>>>代わりにcallocを使うだけだけどな。

おまいらよ、無知とは怖いよ。
おまいらよ、今時EffectiveSTLも読まずに議論に参加しようなんてアホだよ。
キモイレスだなー、とおもったら、なんだ沢村だったのか。
沢「山」
961名無し@沢山:03/07/07 21:08
>>959
おまいらよ、無知を暴かれたからといって
負けイヌの遠吠えのようなカコワルイのはだめだよ。
>>954
const string に対する操作がほとんどなら、CopyOnWriteの方が
速いことが多い。内容を書き換える操作や、書き換えるかもしれない
操作(char& operator[] とか iterator begin() とか)が多いと
毎回素直にコピーする実装にしてallocatorをチューンした方がマシな
ことが多い、らしい。More Exceptional C++ 曰く。
ヌヒらよ。
964v(^・^)v:03/07/07 21:32
http://pc2.2ch.net/test/read.cgi/tech/1057580107/
新スレ

やっとコピペ終わった
連投規制も沢山もうぜーー!
965911:03/07/07 22:38
>>916
俺も原則はそうだと思う。だけど例外的に認められてるんだっけ?という話です。
>>918
あなたの3倍はよく知ってるつもりですが:p
>>919
本当に? >>915 で私が示した void CCamera::Reject() が複雑な関数で
複数の return と例外の throw を含んでいるとしたら何が起こるか理解できますか?
966名無し@沢山:03/07/07 22:42
>>965
ヌヒらよ、これじゃダメなのかよ。

class CCamera {
private:
 CFilm* m_pFilm;
 struct Guardian {
  CCamera& parent;
  Guardian(CCamera& camera) : parent(camera){}
  ~Guardian() { delete parent.m_pFilm; parent.m_pFilm = NULL; }
 };
public:
 void Reject();
};

void CCamera::Reject() {
Guardian guardian(*this);
}

ヌヒらよ、これを踏まえた上でローカルクラスにする必要性があるか説明せよ。
967911:03/07/07 23:05
>>966
沢村よ…、たしかにそれでもできる。いやこの場合は「それでしかできない。」の方が正しかろう。
だがな、まず情報が離散しすぎてる。俺がほしいのは Java でいう finally だ。
それは言ってみれば関数の実装の詳細なのだ。
たとえ前述の例の Guardian の実装を実装ファイルに書いても
ヘッダを汚している事には変わりはない。別の関数で同じような物が必要になってもまたヘッダを汚すことになる。
いいか、これは「シンタックスシュガー」ではない。
あるべきものをあるべき姿で記述しよう!という現代的プログラミングにとって必要な事だ。
だから g++ はわざとそうしているのか?または次期仕様として濃厚なのか?というあたりが知りたかった。

あとな、「ヌヒらよ」は複数形だと思うから単数に使うのは変だと思うぞ。
最後に、age ちゃったスマソだ。
968名無し@沢山:03/07/07 23:12
ヌヒらよ、おれは911の三倍はよく知っているつもりだよ。

class CCamera {
private:
 CFilm* m_pFilm;
public:
 void Reject();
};

void CCamera::Reject() {
std::auto_ptr<CCamera> g(this);
}
969名無し@沢山:03/07/07 23:14
:p
970911:03/07/07 23:23
>>968==969!=966
沢村よ…。966 の沢村なら話し相手になるが、おまえはマ板かドラゴンボール板にでも移動してくれ。
971デフォルトの名無しさん:03/07/07 23:25
おいおい沢村じゃね〜よ。沢山くんだよ。
たくさんくんか。
自己顕示欲旺盛な沢村がsageでメッセージを投稿するわけないな
974911:03/07/07 23:29
>>971
ヌヒよ…、漏れは長い間騙されていたのだね?
いつからタクさんなんてのが蔓延るようになっていたのかね?
975名無し@沢山:03/07/07 23:31
ヌヒらよ、おれは「名前が無い人たちが、あっと驚くぐらい沢山いるなぁ。。」という
2ちゃんに初めて来た人の心情を表したよい名の持ち主だよ。

>>970
ヌヒよ、>>968-969むかついたのか?
ヌヒよ、おれはヌヒと同じことをしたまでだよ。

>>965
>あなたの3倍はよく知ってるつもりですが:p
沢山の意味がわかたーよ。
沢山→宅さん→お宅さん→ヲタク→夏混み合ってるデヴ
でファイナリーアンサー?
どうでもいいから、911 は規格書の 9.8 を読んでから出直せや。
979911:03/07/07 23:38
>>975(デブ)
>むかついたのか?ヌヒと同じことをしたまでだよ。
違うな。>>918 は俺の能力を判断する状況もないまま「見下した表現」を使っただろ?
「あなたの3倍はよく知ってるつもりですが:p」は、それに対するメッセージだ。

ついでに言うと >>968 はもともと漏れが提示した物の意味と完全に外れた事しかしてないし、
スタックに確保されたオブジェクトだったらコアダンプ吐くだけだぞ?

もう少し勉強して出直してこいや >> 968
980911:03/07/07 23:41
>>978
I wrote:
> だから g++ はわざとそうしているのか?または次期仕様として濃厚なのか?というあたりが知りたかった。
981名無し@沢山:03/07/07 23:42
ヌヒらよ、おれはちゃんとコード読んで無かったよ。
ヌヒらよ、911とおれを生暖かく見守ってくれよ。
ヌヒらよ、ヌヒってなんだよ。
 _ _
(o∀o) <おまいらええかげんにせえよと…
983911:03/07/07 23:46
>>981
> ヌヒらよ、ヌヒってなんだよ。
漏れはジョンとか沢村が頭角表してた時期にリアルヒッキーしてて
ム板に入り浸ってたけど、その時の沢村の説明だと、多分標準語でいう
「おぬし等よ」みたいな意味だという事だったと思われ。

何よりちゃんとコード読んでくれたなら天才宅さんなら何かアイディア持ってるんだろ?
984名無し@沢山:03/07/07 23:46
ヌヒらよ、もうおれは一度反撃にでるよ。

>>むかついたのか?ヌヒと同じことをしたまでだよ。
>違うな。>>918 は俺の能力を判断する状況もないまま「見下した表現」を使っただろ?
>「あなたの3倍はよく知ってるつもりですが:p」は、それに対するメッセージだ。

ヌヒよ、違うよ。>>911>>918の能力を判断する状況もないまま「見下した表現」を使っただろ?
ヌヒよ、以下略
985名無し@沢山:03/07/07 23:51
ヌヒよ、これで満足か?
ヌヒよ、精進せいよ。

class CCamera {
private:
 CFilm* m_pFilm;
public:
 void Reject();
};

void CCamera::Reject() {
 struct Guardian {
  CFilm *&p_;
  Guardian(CFilm *&p) : p_(p){}
  ~Guardian() { delete p_; p_ = NULL; }
 } guardian(m_pFilm);
}
986911:03/07/07 23:52
>>982
スマソ、だけど2ちゃんなんて結局そんなもんだよ。次スレ立ったなら埋め立て必要だろうし。

>>984
沢山よ、>>918==984むかついたのか?
>>918>>911の能力を判断する状況もないまま「見下した表現」を使っただろ?
>>918よ、>>911>>918と同じことをしたまでだよ。
recursive....stack over flow.
987911:03/07/07 23:54
>>985
いや、解放するべきメンバが複数個あった時には?解放するべきか判断する材料が他のメンバだった時には?
いちいち全部渡すのは面倒くさすぎるという話からすべて始まってるわけですよ。
988911:03/07/07 23:56
ちなみにローカルクラスと関数内のローカル変数の関係は more exceptional C++ あたりに
興味深い解説が載ってるよ。

とかせめてもの罪滅ぼしにちょっと情報提供とかしてみた。
989名無し@沢山:03/07/08 00:00
ヌヒよ、おれは918じゃないよ。
ヌヒよ、おれには918はやさしいアドバイスに見えるよ。

ヌヒよ、これでおれのやさしいアドバイスもこれで最後だよ。

class CCamera {
private:
 CFilm* m_pFilm;
void Reject_impl();
public:
 void Reject();
};

void CCamera::Reject() {
try{
Regect_impl();
}catch(...){
}
delete m_pFlim;
m_pFlim=0;
}
void CCamera::Reject_impl() {
}
ヌヒ=奴婢=召し使い
991911:03/07/08 00:15
>>989
やさしいアドバイスをたくさんありがとう。

その手法は厨房の頃からやってるが…
・戻り値が参照やポインタではなくて大きなオブジェクトだった場合の負荷が大きい
という大問題があるのだよ。
さらにそのソースだと Reject_impl が意味のある例外を投げたけど投げなおしたい時どうする?
Reject() の catch の中に同じ事何度も書くのは無駄かつミスの元だよね?
>>987
ScopeGuard 使おう。
993デフォルトの名無しさん:03/07/08 00:19
よし藻前ら!セントリーノモバイルテクノロジ合戦いくぞー!
994911:03/07/08 00:27
>>992
ありがとうございまふ。
ぐぐったけど英語のページしか出てこないです。
(もっと詳しく調べるために)ある程度あたりをつけたいので
何なのかさらっと教えていただけると助かります。
つたない英語力でちょびっと読んだ所は boost の一部?もしくはパターン名?
犯人は松子
1000を取るのは誰でしょね?
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。