C++相談室 part22

このエントリーをはてなブックマークに追加
>>949
__cplusplus
953デフォルトの名無しさん:03/09/04 22:03
おしえて!

newしたときのメモリサイズってどうなるんですか?

私はC使いなんですが、Cの場合必ずサイズを指定するけど、
newってサイズ指定がありませんよね?

内部的にはどうなってるんだろ・・・

あと、operator newってなんでoperator new( size_t size)とか定義されているの?
このサイズって何?

newを再定義したら、

Unko* unko = new Unko( 100 );
とかやんないとだめなん?
954葉月:03/09/04 22:13
__inLine っていうのがよくわかりません。
誰かおしえてください。
>>953
 new TypeName
って書いてあると、コンパイラがこれは
 (TypeName*) operator new( sizeof(TypeName) + α )
だと思ってコンパイルする。operator new が再定義されてても
関係なく↑こうなるので、再定義したnewの size_t にも
コンパイラが良きに計らった値が自動で入ってくると思っていい。

>>954
多分、その関数をインライン展開できたらしてね、というコンパイラへのお願い。
つーか __ (下線2本) で始まるのは処理系依存の機能だ。
何のコンパイラ使ってるかくらいは書くべし。
956デフォルトの名無しさん:03/09/04 22:26
gccがC++実装したときから使ってるんだけど・・・Winはほとんど人様の
作ったアプリを使わせていただく環境だと思ってたので、
Visual C++の解説本読んでも知らないことがいっぱい出てきてびっくり。
プログラマじゃないので最新仕様追っかけてなかったから浦島太郎状態。
うーん、スタンダードの追加仕様なのか、MSの仕様なのかわからない。
C#にするわけにはいかないのよ。C++で書いてきたコードが膨大で・・・
>>953
(・3・) エェー サイズは指定される型によって自動的に決定されるんじゃないNO?
例えば new int なら sizeof(int) の分だけメモリが確保されるんだYO 多分
>>955
__cplusplus
959デフォルトの名無しさん:03/09/04 23:08
ツールを開始できません。
この操作を正しく終了しました。
ツールを開始できません。
'vcspawn.exe' 実行時のエラーです。 ビルドを実行できませんでした。

というエラーが出てコンパイルできません。
解決方法を教えてください
>>959
すれ違い
>>957
sizeof(int)以上なのは確実だが、== sizeof(int)とは限らない。
そろそろ次スレよろ
963デフォルトの名無しさん:03/09/04 23:34
#define private public
#define protected public
964葉月:03/09/05 00:07
>>955
ありがとうございます。
コンパイラは VC++ です。
「インライン展開」と「処理系依存の機能」というのはなんですか?
>>963
だから?
>>964
http://www.google.co.jp/
という素敵なサイトがあるので是非。
967葉月:03/09/05 00:26
>>966
それはどこに住んでるのと聞かれた時、地球と答えてるのと同じです。
>>967
僭越ながら、そのたとえは違うかと。
「これについてしってる?」と聞かれたとき、「図書館で探せば」と答えているのと同じです

要するに的を射ている回答だと
>>967
住所録を渡しているものと思われ。
質問はどこで調べればいいのかを聞いているのではないから
的を射ていないのは明らかだ。
そんなことより次スレ
972デフォルトの名無しさん:03/09/05 00:44
逃げてぇー、早く逃げてぇー
まぁ答えてもいいけど、954には理解してもらえないかも。

インライン展開は関数呼び出しのオーバーヘッドを無くす代わりにサイズが大きくなる
処理系依存の機能というのは一般に処理系に依存した機能全体をさす。
>>972
懐かしいな
>>974
元ネタは?
976デフォルトの名無しさん:03/09/05 00:51
>>976
梅梅
979デフォルトの名無しさん:03/09/05 07:44
メモリの再利用について、その考え方や簡単なコード等を
教えていただけないでしょうか?

もしくは、参考となるようなサイトがあれば、教えていただきたいのですが・・・・
おねがいいたします。

>>979
new で確保したメモリはdeleteするまで
開放されません。お好きなように利用して下さい。






ってことじゃないよな…
981葉月:03/09/05 08:18
>>前スレの973
ありがとうございます。
>インライン展開は関数呼び出しのオーバーヘッドを無くす代わりにサイズが大きくなる
これは、ソース上、関数風な呼び出しを使用しているけど、
コンパイル時に、呼び出し元の関数内にinLineの内容が記述されているというようにあつかうということですか?

#define UNIUNI(i) ++i

みたいなのと似たようなものですか?
>>981
似たようなものです。

その例だと、
inline int& uniuni(int& i){ return ++i; }
が(intに限って)同等(になり得る)。

これ以上はgoogleなり、入門書なりで調べれ。
> >>前スレの973

随分と亀レスだなおい!
984デフォルトの名無しさん:03/09/05 14:29
C++のbool型メンバ変数は初期化される仕様ですか?
コンパイラ依存の話でなくて、C++言語の規定として。
985デフォルトの名無しさん:03/09/05 14:33
C++,C#,Cと綺麗にスレッドが並んだな。
組み込み型のメンバ変数のデフォルトコンストラクタは自動では呼ばれない。
987デフォルトの名無しさん:03/09/05 16:32
指定したディレクトリ内にあるファイル名をすべて取得する
関数はありませんか?
メンバ変数にデフォルトコンストラクタなんてあるのか?
>>987
無い。自分で作れ。
990げと
991991:03/09/05 16:39
ほーたーるの
>>987
C++標準ライブラリの中にはない。
boostならfilesystemあたり。
その他Win32API等の環境依存ライブラリには当然ある。

>>988
全ての組み込み型に0で初期化するデフォルトコンストラクタがある。
993992:03/09/05 16:40
ひーかーぁり 
>>992
>全ての組み込み型に0で初期化するデフォルトコンストラクタがある

ほんとに?
>自動では呼ばれない。
ってどゆこと?
1000!
ずさーーーーーーーーっ
げと
999デフォルトの名無しさん:03/09/05 16:53
うめうめうめうめうめれんじゃーーー
1000get

ところで、>>322について誰か知りませんか?
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。