>>949 それって結局別の処理かかなきゃいけないわけだしいいんじゃないの?
駄目なの?
必要もないのに必要のない値が一括で流れてる構造っていいの?駄目なの?
引数できっちり渡すことこそきちんとしたプログラムじゃない?
それとも実装の手間惜しんでバグ増やすほど作業時間切迫してるの?
class T
{
public:
void foo(C& c);
void bar(C& c);
// foo() と bar() には必ず同じインスタンスを渡してください!!
};
こんなコメント書くぐらいなら T の中に C& c を持ったほうがいいこともあるでしょ。
>>953 ないって
よしんばあったら設計がまずい
どんな状況だそれは
そもそも使う側からみて
if(pC)chinko.setC(pC);
chinko.foo();
unkounko();←実はこのときにpCシボンヌ
chinko.bar();←そうとは知らないchinkoがpC使おうと必死の形相で実行
なんて見た目問題おきないようなコードでやられたら一生バグがみつからん
っていうかチェックが甘すぎる
このコードはせめてこうなってなきゃ駄目だろ
素人じゃないんだから
if(pC)chinko.setC(pC);
if(pC)chinko.foo(pC);
if(pC)unkounko(pC);
if(pC)chinko.bar(pC);
なら使用してる側からもpCにアクセスしてるってわかるだろ常考(エラー処理もほしいが)
↓これじゃ意味不明じゃん
if(pC)chinko.setC(pC);
chinko.foo();
unkounko();
chinko.bar();
>924
AとBは一対一対応?
何で多重継承じゃダメなの? 動的に切り替わったりするの?
>956
昔からある所有権の問題だな。
素直にスマートポインタ使うのがベター。
>>957 そうかぁ?
スマートポインタって落ちないだけじゃね?
俺は引数を使ってうまく組むべきだと思うけどね
>>953 自分ならせめてこうする。
class T
{
public:
void foo_bar(C& c) {
foo(c);
bar(c);
}
private:
void foo(C& c);
void bar(C& c);
}
>>959 ポインタの保持の問題をいってるのにおかしなこという
961 :
957:2008/12/27(土) 01:16:25
>958
依存関係を減らすのは重要だけど、本質的に依存するものを切り離すのは本末転倒だからね。
結局のところ、クラス同士がどういう関係で、何を処理するか次第だと思うよ。
>>961 いや、そんなことねぇよ
やっぱり、こういうポインタを保持しちまうなんてのは
PGの怠慢なんだよ
怠慢するならするでさ
なにかフォローが必要なんだと思うぜ
もちろん他の人間もわからないしさ
人に対してもソースに対してもそういう配慮が必要になるのを忘れちゃいけない
資料作ったりコメント残したりね
そういうのが嫌だったら引数で渡すようにしたほうがいいぜ
引数だって構造体でまとめて変更あってもソース変わらないですよね?
なんて意地悪しないでちゃんと一つ一つチェックして渡すべき
963 :
957:2008/12/27(土) 01:25:32
ついでに言うと
・引数で渡す
オブジェクトが生きていることを保証する責任は関数を呼び出す側(のプログラマ)が持つ
・スマートポインタのメンバとして保持
オブジェクトが生きていることを保証するのはスマートポインタ。
ただし、循環参照など別の問題が発生するかどうかを管理する責任はスマートポインタを
扱う部分全体(のプログラマ)が持つ
といった感じかね。
> 基本的に、最適化しづらいコードってよくないと思うんだ。
最適化されますようにって気を使って技巧的に書いたソースからできたバイナリよりも
深く考えず自然な形で書いたソースからできたバイナリのほうが最適化されていることがある罠。
965 :
957:2008/12/27(土) 01:30:24
>962
だから内容次第だってば。
例えばイテレータとかはポインタをメンバとして持たないと何にもできないぜ?
>>965 ごめん
C++のそういう機能全般使ったことないわ
俺、C+クラスぐらいの機能でもう10年ぐれーそれで通ってきてる
これまで言語は規制をかけることで発展してきたけど
C++のテンプレート類はなんか便利な機能群な感じがして
これまでの言語の進歩とは違うっていうか勘違い系が入ってる気がするんだよね
毎回、何がいいの?その程度の機能って感じがする
967 :
957:2008/12/27(土) 01:43:49
さすがにC++をC++として使うのなら、STLとか使わないのは勿体無いよ。
ベターCとして使うんだったら別に構わないけど。
もちろん、純粋関数だけを使用して宣言的にプログラムすることもある程度可能だけど、
全部それでやろうとすると大変な部分が出て来るからね。
>>967 あんまり便利にならなくね?
むしろ、問題ばっかりおきる
あれだけ汚いコードかかせてやってくれること可変配列だけっていらないだろ
配列 new ダイレクトに使ってんのか?
ちょっと例外起きただけでメモリリークするようなプログラム組んでんじゃねーだろうな。
newはオーバーライドしてあるからいいチェック入ってるな
でもmallocラップした関数のがいい機能あるんだよね・・・orz
いい機能w
shared_ptrとか使わずにnewやmallocをラップしただけで対策してる気になってる?
だったら間違いなく例外脆弱なコードになってるな
「俺は例外なんか使わないから関係ないぜ!」とか言わないように
関係なくないから
>>972 引数通すから必要ないよ
お前が想定してる自体のほとんどの可能性からいって潰れてるから
必要ないんだろうな
ライブラリが勝手に例外投げる事もあるからな。
>>973 騙るならまず日本語を勉強してからにしてくれ。
ポインタの保持もしない
引数で渡してるならほとんど問題おきないな
引数で渡すって怠慢をするから他の多くのものが必要になってる感はたしかにある
X引数で渡す
○引数で渡さないでポインタを保持する
newしたポインタを誰も管理せずに関数の引数で持ち回ってるの?
それだから例外安全だって言ってるの?
ダメだこいつ早く何とかしないと
void foo(X *px){
...
bar(px);
...
}
int main(){
foo((X*)malloc_wrapper(sizeof(X)));
delete X;
}
引数で渡すってこういうこと?
>>978 どういう場合を考慮して駄目って言ってるの?
>>979 インスタンス1つに付き変数1つみたいな感じだ
なんではじめのmallocで確保したときは変数もってもいいぜ
でもそれ以外は駄目
引数で渡すってのはそれであってる
fooやbarが例外投げたらとか下らないことは言うなよ
絶対投げない関数しか使わないから
エラーメッセージだして終了だろ常考
例外を送出しない保障の関数しか使わないのかー。
そんな最強クラスに強い例外安全性だけでコード書くとか俺には無理すぎる。
>>983 例外使えないとなんか駄目なんだw
そんなにあの機能役に立つとは思えないけどなー
コードスタイルひっくり返すほど重要なんだw
あんまり応用効かない技術に頼ってんのな
なんかの位置間違えたんだろうなきっと
>>984 だって便利とかの以前にC++の他の人が書いたライブラリはほぼ全滅。
標準ライブラリもboostも諦めるしかない。
newもnothrowとかplacement newとかしか使えないじゃん。
ついでにoperator hoge(=,+,etc)系は、
本質的に例外使えないとエラーを表現できないから使えない
同じくコンストラクタもエラーの通知方法は例外だから使えない
operator =とコンストラクタが使えないって事は結局ただのPODと殆ど同じ。
エラーの発生しない事が保障できるなら上の構文も使えるけど、
そんなのはPODに毛が生えたようなしょぼいデータ構造だけだろうし役には立たなさそう。
POD相当のクラスしか使えないC++って何に使えるの?
本当にCよりはマシってぐらいしか使い道なさそう。
個人的にはC++では例外は空気のように存在してて、それが無い世界が割と想像できん。
Google 社では例外禁止だけどな。
>>986 だから全部使ってねぇって
C+クラスしか使ってねぇっていってんじゃん
つまり、C99で拡張された機能も使えずC++の便利な機能も一切使えず、
未だに20年近く前の技術にしがみつくということなのですね、判ります。
>>990 仮に使うと何がどうよくなんの?
って機能ばっかりだけどな
クラスにしてもあんまりご利益ないんだよね
老害
いやだから、頭が20年前のレベルから進化してないのだろ?
大人しくCを使っておけばいいと思うよ。
COBOL専業のソフトハウスだってあるご時世だ、C専業もあるだろさ。
つーか、>992に同意。
>>960 ならそもそも、954も言っているが、953のような有り得ない状況を元に話をするなよ。
>>993 みんなそうだけど
全然説明できないよね
テンプレートまわりの利点ってさ
作り手のオナニー以上の効果は絶対にない
こういうのをマクロではなく関数として記述できるとか、
#define swap(type, x, y) do {type t = (x); (x) = (y); (y) = t;} while (0);
CのqsortよりC++のsort関数テンプレートのほうが見た目が自然でしかも速いとか。
言ってみろって言われて初っ端そんなことしかでてこないところとか
もうホントなんもねぇだろw
↓最後に当を射たレス
1000ならC言語に戻す
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。