【初心者歓迎】C/C++室 Ver.84【環境依存OK】

1名無しさん@Next2ch:2013/05/16(木) 13:54:54.16 ID:MGNiMjNi

エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.83【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1363154865/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

2名無しさん@Next2ch:2013/05/22(水) 21:15:23.65 ID:fqArRwOt

質問です。
あるサンプルコードにこんな感じのコードがありました。

funcA( &ClassB(arg1, arg2) );

多分ClassBのインスタンスのアドレスを渡す…みたいな感じだとは思うのですが、質問したいのは

・上記の解釈で合ってるのでしょうか?
・合ってるとして、ClassBのインスタンスはいつどこに生成されるのでしょうか?(funcAの呼び出しと同時、funcAの呼び出しより前、呼び出されたfuncAの中で、ヒープ、スタック、静的など)
・また、破棄はどのタイミングで行われるのでしょうか?それとも破棄が保証されない可能性がありますか?

3名無しさん@Next2ch:2013/05/22(水) 21:21:04.33 ID:fqArRwOt

連投すみません。要するに、初めて見たこの文をどう脳内で文法解釈したら良いのか分からないのです…

4名無しさん@Next2ch:2013/05/22(水) 23:26:07.07 ID:TBBrIDsw

>>2
http://codepad.org/8Tp3fal6
・new で確保しない以上、やはり例外なく(例外は例外だが)インスタンスはスタック上に一時オブジェクトとして確保されているようだ
・スタック上である以上、funcA の呼び出し前にコンストラクタは走り、funcA の後で破棄されているようだ
・funcA() の中にいるかぎりclassB() の一時オブジェクトは生きているようにみえる、問題ないのでは?

しかしgccは文句をいってくる‥‥やっぱりだめなのか?

5名無しさん@Next2ch:2013/05/23(木) 12:10:51.44 ID:I2LfO1jc

今までサンプルの似たようなコードで出ていなかったので当然ではありますが
同コードをVS2008上のVC++2008で試したところ、全く警告も出ず…
g++では確かに警告が出ますね、あまり褒められた書き方ではないのでしょうか…自分で書くときには一応やめておきます。

6名無しさん@Next2ch:2013/05/23(木) 12:11:25.60 ID:I2LfO1jc

ありがとうございました。


レスを書き込む