- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ]
- エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1184717430/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 577 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:42:58 ]
- new(nothrow)使えば問題なし
- 578 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:45:10 ]
- newハンドラ使えば問題なし
- 579 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 20:49:37 ]
- set_new_handler じゃなくて _set_new_handler で、
new ヘッダじゃなくて eh.h で宣言されてたんだっけ。 bad_alloc は VC5 で宣言されてたっけ?
- 580 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:01:23 ]
- >>565
VCだと昔から日本語対応の関数はあって、どこかのバージョンで _ismbXXXX のようなマルチバイト系関数であることを明示するような 関数名になったはず。 それがVC++5.0かどうか知らないが、でもだから対応する関数はあるはず。 で、ぐぐると以下のサイトに適度に古そうな関数名がならんでいるので 試してはどうだろうか。 ttp://www.geocities.co.jp/SiliconValley-Bay/7437/c/is.htm
- 581 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:08:46 ]
- UTF-8だったりEUC-JPだったりISO-2022-JPだったりする可能性は?
というのは余計なお世話か。
- 582 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:12:02 ]
- 文字コードについては>>565が勝手に判断するでしょ。
だいたいVC++5.0の時代のアプリにShift_JIS以外使ってるとも思えないけど。
- 583 名前:でいびす mailto:sage [2007/08/22(水) 21:14:17 ]
- VC9使うことにしますた
- 584 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:09:24 ]
- VC++はソースのエンコードすら指定できない糞コンパイラ
- 585 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:13:51 ]
- >>584はVC++はソースのエンコードすら指定できないコンパイラと思っている糞
- 586 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:20:15 ]
- できるの?
clにそれらしいオプションが見当たらないからできんのかと思ってた
- 587 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:24:34 ]
- >>585
どうやって指定するの?
- 588 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:31:21 ]
- >>585
おれもきになる
- 589 名前:デフォルトの名無しさん [2007/08/22(水) 22:40:08 ]
- std::vector<foo> hoge という変数があるとして、
これを関数の引数に渡すときはhogeのポインタを渡した方が hoge自体を値渡しするより動作は速いですか?
- 590 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:41:32 ]
- その通りだが、せっかくC++なのだからリファレンス渡しするか
iteratorを渡せ
- 591 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:43:22 ]
- 何すかそれ
- 592 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:45:33 ]
- void hogehoge(std::vector<foo>& rhoge);
- 593 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:48:03 ]
- >>591
void swap_ptr(int *a, int *b) { int tmp = *a; *a = *b; *b = tmp; } void swap_ref(int &a, int &b) { int tmp = a; a = b; b = tmp; } main() { int m = 1, n = 2; swap_ptr(&m, &n); swap_ref(m, n); } swap_ref()がリファレンス渡し。 この場合は入出力引数だが、入力だけでいいんならconstつけろ。
- 594 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:50:19 ]
- >>590
サンクスコ
- 595 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 22:55:22 ]
- >>593
サンクスコ
- 596 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:12:21 ]
- ドトネトのMicrosoft.VisualC.CppCodeProviderってもしかしてclのかわりに
C++コンパイルできんのか マネージドじゃないと無理かな
- 597 名前:デフォルトの名無しさん [2007/08/22(水) 23:37:33 ]
- vector<CHoge>::iterator itr;
このitrが指してる要素の中身のアドレスを取りたいときは どうやって書けばいいんですか? CHoge* p_hoge; p_hoge = &itr; とか書いたら怒られました。
- 598 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:40:54 ]
- p_hoge = &*itr;
- 599 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:12 ]
- CHoge* p_hoge = &*p_hoge;
vectorなら鼻からbegin()/end()を使わず、 &v[0]と&v[0] + v.size()でポインタを得て、 それをイテレータとしても使うという手もある。
- 600 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 23:42:39 ]
- >>598
出来ました。サンクスコ
- 601 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:12:40 ]
- 鼻から悪魔に見えた
- 602 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:32 ]
- >>584
エンコードの指定は出来ないが、 BOMが付いてればUnicode LE/BEやUTF-8はそれで判定する。 BOMがなければANSI文字コードとみなしている。 javacやunix系のコンパイラはUTF-8にBOMが付いてると処理してくれないものが多く、 双方で利用しようとすると結構めんどい。
- 603 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:13:53 ]
- 悪魔から鼻に見えた
- 604 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:49:46 ]
- >>577
そんなことしてもコンストラクタから飛んでくる例外は止まらないぜ。
- 605 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 01:50:20 ]
- なんかかっこいい
- 606 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 11:14:46 ]
- >>602
それなりに移植性考えたらC++のソースにBOMつけるとかありえんわな で、当然boostのソースにはそんなもんついてないし、一部のヘッダにLatin-1な 人名が入ってるから、VC++8.0でコンパイルすると色々苦情を言ってくんのな
- 607 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:47:56 ]
- C++でHTMLのタグのようなものを使用していたり、『::』のようなものなどを見かけます。
Cには無く、C++では使用出来るようなことを幅広く説明している書籍でお勧めのものはありますでしょうか。 発売年や価格、本自体の厚さなど数多くありすぎて、どういうものを購入すればいいのか分かりません。 近くに本屋さんはあるのですがプログラム関係は少ないですのでネット通販で買おうかと考えております。 それ故、内容が確認できず判断が・・orz
- 608 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:50:21 ]
- HTMLのタグ・・・確かにそう見えんことはないw
- 609 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 22:58:28 ]
- なんだそりゃ、templateのことか?
あまりに斬新過ぎる見解でワロタ それはそうと、wxWidgetsのWindowProcって、ウィンドウクラスのインスタンス 見つけるのにわざわざグローバルなハッシュテーブル引いてんだな、なんだこりゃ せめてWin32ならGetWindowLongPtr()使ってくれよ なんかそうできない技術的理由があんのか ATLみたいなサンクに書き換えたら、そんだけで激高速化すんじゃね?
- 610 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 23:15:45 ]
- >>607
結局この本は必要…通読する対象ではない気がする、字引的にほぼ全部載ってる www.amazon.co.jp/dp/475611895X
- 611 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:31:15 ]
- そんなに高速化するわけない。
いったい一秒に何回メッセージが来て、 グローバルハッシュを引くのに何ナノ秒 余分にかかるというんだ?
- 612 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:37:41 ]
- 一秒に何回メッセージが来て、
グローバルハッシュを引くのに何ナノ秒 余分にかかる
- 613 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:38:15 ]
- 俺も初めて見たときはタグかと思った。
includeファイルに.hが付いていないことや、標準入出力に<<、>>を使うこと、 「::」の存在など何もかもが新鮮だったあの頃・・・ いまだに初心者の域を抜けられぬ現状orz
- 614 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:40:43 ]
- ::は斬新だった。こうゆう記号ってなんか意味を持って決められてるのかな?
- 615 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 00:43:25 ]
- 意味的に : を使いたいけど、ラベルと被るから :: にしたんじゃね?
- 616 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 01:44:24 ]
- 斬新といえばいえなくもないが、: (コロン)は、通常のラベルどころか
・caseのラベル(厳密にいえば通常のラベルと変わらない) ・クラス継承 ・コンストラクタの初期化子(?) ・条件演算子の一部 など、よくこれだけ機能を持たせられたと思うものだ。 さらに、ストリームにビットシフト演算子を使うなんて、どこのアホが考えたかと思う。 演算子オーバーロードを見せつけるための演出としか思われない。 さらに、マニピュレータだって?printf系の方がよっぽどうまく素早く整形できるわ。 あんなのC++委員会の遊びにすぎんよ。 もっとも、Cよりは便利なので使わせていただいていますけどね。
- 617 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:07:29 ]
- べ、別に好きでC++を使っているんじゃないんだからね!
Cより便利だから使ってあげているだけなんだからねっ!
- 618 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:22 ]
- おっさんが書いてるんだぜ?きめぇ
- 619 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 02:11:29 ]
- >>616
iostreamとマニピュレータの登場は、標準化委員会の発足より古いはず。 D&Eによれば入出力に演算子を使うのはDoug McIlroy、 マニピュレータはAndrew Koenigのアイデアだそう。
- 620 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 04:31:27 ]
- printf より優れてる点は型安全な点とポリモーフィズムだな。
printf 風マニピュレータを作らなかったのは C++ の汚点だな。
- 621 名前:デフォルトの名無しさん [2007/08/25(土) 06:21:38 ]
- なんで queue には clear() が無いの?
- 622 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:13:32 ]
- ああ、すまん
作るの忘れてた
- 623 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 10:32:35 ]
- 納得した
- 624 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 10:37:06 ]
- 何のqueueにclearが無いの?
- 625 名前:デフォルトの名無しさん [2007/08/25(土) 11:05:14 ]
- 参照渡しでもらった引数をさらに別の関数に参照渡しするのって
なにか問題ありますか?
- 626 名前:デフォルトの名無しさん mailto: sage [2007/08/25(土) 11:09:57 ]
- G++ の STL の queue, priority_queue, stack.
コンテナアダプタには clear() が用意されて無いけど何か理由があるんでしょうか.
- 627 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 11:55:33 ]
- G++wwwwwwなんという未来言語wwwwww
- 628 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:00:58 ]
- 無知発見
- 629 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:13:16 ]
- 自己解決しました.
- 630 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:15:02 ]
- >>627
これはひどいwwwwwww
- 631 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 12:27:56 ]
- >>627=630
そんなエサで俺様が釣られるかクマー
- 632 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 13:55:48 ]
- >>625
別に問題ない。 寧ろ、参照渡しでもらったものをポインタ渡しするほうがおかしいし、 参照渡しでもらったものを値渡ししてしまったら意味が違ってしまう。
- 633 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 15:43:54 ]
- 何でないんだろうね。
プリンタジョブとかに queue を使ったとして、 ジョブを全部破棄とかすることあるだろうに。
- 634 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:01:42 ]
- 1億と2000年前からpopしなさい、というお達しか
- 635 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 16:12:47 ]
- while(!q.empty()) { q.pop(); }
としろ、ということか。
- 636 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:14:26 ]
- そうだdequeをつかおう
- 637 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:16:04 ]
- q.~queue();
new(&q) std::queue<T>; 冗談だよ、冗談。
- 638 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:24:21 ]
- 素直にq=std::queue<int>();と書いてやれよw
- 639 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:40:57 ]
- queue のソースを書き換えればいいんじゃね?
- 640 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 17:47:21 ]
- queue を継承した my_queue を(ry
- 641 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 18:26:24 ]
- (x = 1) = 2;
これ、Cだとエラーなんだが、C++ではコンパイルできる 何で?
- 642 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:11:39 ]
- x = 1の結果が、Cは右辺値、C++は左辺値と定められているから。
- 643 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:19:25 ]
- >>642
やっぱりそういうこと? ストラウストラップの本とK&RとCの規格書調べたんだけど、それらしい記述を 見つけられなかったんだけど、どこかに明記されている?
- 644 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:26:25 ]
- =演算子が参照を返すからじゃね?
- 645 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:51:03 ]
- >>643
642じゃないけど C言語はJIS X 3010の.5.16代入演算子 代入式は、代入後の左オペランドの値を持つが、左辺値ではない。 C++は手元にあるのが15年前のARM日本語版しかないけど、5.17代入演算子 代入演算子の結果は、代入が行われた後に左のオペランドに格納してある値である。従って、結果も左辺値である。 Cの規格書って何を調べたの?
- 646 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:54:07 ]
- >>644
>>642
- 647 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 19:58:03 ]
- >>645
脳内
- 648 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:23:22 ]
- X3014にも5.17 1節目の最後に「結果は,左辺値とする。」と書いてある。
>>644 型と右辺値左辺値は別の段階の話。
- 649 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 20:33:34 ]
- 三項演算子で変数返すコード書いて左辺値にしても大丈夫
- 650 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:36:12 ]
- たくさんのレスthx
>>645 同じ規格書の同じとこ読んだんだけど、 代入式: 条件式 単項式 代入演算子 代入式 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ってなってたから、代入式ってのは上の3行目(波線部分)の代入式 のことを言ってるのかと勘違いしてた 単項式 代入演算子 代入式 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ これ全体を代入式と言ってるのか とすれば x = 1 という代入式の結果は左辺値ではないということに なるか 代入式は、代入後の左オペランドの値を持つが、左辺値ではない と書いてあるけど、代入式の結果は と書いてくれたほうがクリアになるなあ ~~~~~~~~~~~~~~~~~ BNF記法が分かってなかった >>648 なるほど C++のほうはEffectiveにも参照を返すと書いてあるから 理解できた C++の規格書も買うかな
- 651 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:42:13 ]
- 禿の本がまだなら規格書よりそっちを先に読んだ方がいいよ
- 652 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:46:24 ]
- >>650
知ってるかもしれないが、JISの規格書なら以下で参照できる。 日本工業標準調査会 ttp://www.jisc.go.jp/index.html C JISX3010 C++ JISX3014 検索できないのは最悪だけど。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:49:36 ]
- >>651
調べ物するときは同じ内容について 色々な本に目を通してるんだけど、 結局、規格書に明記されてると確信に変わる んで安心できる 禿の本ってEffectiveのこと? 結構高度だから必要に応じて関連する項目を 潰していこうと思ってる
- 654 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:52:34 ]
- >>652
最初、Cの規格書もそこを見てたんだけど 検索できなくて疲れるから買ってしまった
- 655 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 22:59:44 ]
- 禿本 : Bjarne Stroustrup著 プログラミング言語C++
- 656 名前:デフォルトの名無しさん mailto:sage [2007/08/25(土) 23:52:51 ]
- >>650
代入式の結果が左辺値か右辺値かは、構文から 決定できる問題ではないので、構文を記した部分は関係ないぞ。
- 657 名前:デフォルトの名無しさん [2007/08/26(日) 03:47:09 ]
- class Hoge{private:vector<CFoo> m_vecFoo;};
Hoge::Hoge(){ //落ちる場合1 CFoo foo = CFoo(age,sage); m_vecFoo.push_back(foo); //落ちる場合2 CFoo foo; foo = CFoo(age,sage); m_vecFoo.push_back(foo); //落ちない場合 CFoo* foo = new CFoo(age,sage); m_vecFoo.push_back(*foo) } あるクラスCFooについて、newでインスタンスを生成した場合は落ちないんですが、 newを使わないで直接生成した場合(そういうのをなんていうのか知りませんが) push_backの行で落ちてしまいます。一応どの場合もコンパイルは通ってます。 原因がまったく分からないのでエスパーしてください^^;お願いします。 デバッグ結果:xutilityファイル内↓ inline void __CLR_OR_THIS_CALL _Container_base::_Orphan_all() const { // orphan all iterators _Lockit _Lock(_LOCK_DEBUG); if (_Myfirstiter != _IGNORE_MYITERLIST) { for (_Iterator_base **_Pnext = (_Iterator_base **)&_Myfirstiter; *_Pnext != 0; *_Pnext = (*_Pnext)->_Mynextiter) (*_Pnext)->_Mycont = 0; ←この辺でとまってる模様 *(_Iterator_base **)&_Myfirstiter = 0; }
- 658 名前:657 mailto:sage [2007/08/26(日) 03:53:14 ]
- //さらにもう一個、落ちる場合
CFoo foo(age,sage); m_vecFoo.push_back(foo); ちなみに、push_backをコメントアウトして飛ばせば一応落ちないで動いてるようなので 落ちているのはpush_backの行みたいです。
- 659 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 05:25:40 ]
- その「あるクラス」がどんなものなのか説明しろよ。
ちゃんとコピーコンストラクタでディープコピーしてるかとか。
- 660 名前:デフォルトの名無しさん [2007/08/26(日) 09:15:04 ]
- >>659
すいません。力尽きて寝てました。 実際のCFooはでかいのでそのまま貼ることはできませんが、 ・コンストラクタの引数にポインタ型がある ・メンバにもポインタ型がある ・引数つきで生成されること前提なのでデフォルトコンストラクタとか作ってない ・唯一書いてある引数ありのコンストラクタは、メンバを初期化リストで初期化せずに コンストラクタの中身で初期化してる ・単純なGet〜みたいな関数はヘッダに直接書いてある この辺がなにか関係してるでしょうか?
- 661 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:36:45 ]
- レスに間が空いててもいいが、わざわざ寝てましたなどと言わなくていい
- 662 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:39:42 ]
- レスに間が空いててもいいし、わざわざ寝てましたなどと言ってもいい
- 663 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 09:43:44 ]
- >>660
>659の質問に答えたまえ。 コピーコンストラクタを設けていないのなら、C++を初歩から勉強しなおせ。
- 664 名前:デフォルトの名無しさん [2007/08/26(日) 09:51:36 ]
- ディープコピーって何ですか?
- 665 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:28:29 ]
- 本読め
Effective C++とかEffective STLとか
- 666 名前:657 mailto:sage [2007/08/26(日) 10:35:13 ]
- なんかポインタのメンバとかもってたりするクラスは
コピーコンストラクタなるものをきちんと実装しないと 値渡ししたりするときに問題が発生しやすいらしいので m_vecFooにはポインタを渡すことにしました。
- 667 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:38:42 ]
- 参照を参照のままコピーするのが浅いコピー
参照先を複製してコピーするのが深いコピー
- 668 名前:デフォルトの名無しさん [2007/08/26(日) 10:52:14 ]
- コピーコンストラクタを実装してなかったことが原因な気がしてきてはいるのですが
なぜpush_backの段階で落ちてるんでしょうか? 二重でdeleteされてるわけでもないし、理屈がわかりません。
- 669 名前:デフォルトの名無しさん [2007/08/26(日) 10:52:28 ]
- ディープキスって何ですか?
- 670 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 10:56:26 ]
- 保育園でするもの
- 671 名前:657 [2007/08/26(日) 10:59:13 ]
- >コピーコンストラクタなるものをきちんと実装しないと
>値渡ししたりするときに問題が発生しやすいらしいので 訂正ですが、ポインタのメンバを持ってるクラスの コピーコンストラクタをきちんと実装してない場合、 ”値渡しする段階”で問題がでるのではなくて、 ”後始末の段階”で二重のdeleteが起きたりするので危険なんですよね? なんでpush_backしただけで落ちるんでしょうか? どんな可能性が考えられますか?
- 672 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:10:13 ]
- とりあえず、デバッガで
本当に push_back の行で落ちてるのかどうか確認してみた方がいいんじゃない?
- 673 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:13:40 ]
- >>671
CFoo foo = CFoo(age, sage); CFoo bar = foo; とりあえずこのコードで落ちたりしないか?
- 674 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:23:30 ]
- あと、
>CFoo foo; >foo = CFoo(age,sage); これをちゃんと動かしたいなら、代入演算子も定義しとけ。
- 675 名前:デフォルトの名無しさん [2007/08/26(日) 11:38:52 ]
- >>672>>673
CFoo foo = CFoo(age, sage); CFoo bar = foo; としたらpush_backをコメントアウトしても落ちました。 ってことはやっぱりコピーコンストラクタなるものが きちんと実装されてないのが原因っぽいです。 でも実装してないときはコンパイラが勝手に作ってくれるんじゃないんですか? で、勝手に作られたものでは”破棄時”に問題がでるので、 自分でうまく実装しないと危険ってだけなんじゃないんでしょうか?
- 676 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 11:39:52 ]
- >>671
それはもちろんだが、その前に、解放済みの動的資源を参照するオブジェクト ができてしまうことがマズイだろ
- 677 名前:657 [2007/08/26(日) 11:43:25 ]
- あぁ、なんかコピーをした段階で落ちてるんじゃなくて、
一時オブジェクトが解放される段階で落ちてるみたいです。
|

|