test();とすると、コピーコンストラクタが省略されるかどうかはコンパイラに依存します(最近は省略される方が多い)。Test();で生成と同時に例外を投げると、コピーコンストラクタが呼ばれないように見えますね。コピーされた後に破棄されますが。試してまで頂きありがとうございました。デストラクタ普通に考える感じで呼ばれているのがわかりました。02:25言葉で説明するより、実験した方がよいと思います。test();のように例外オブジェクトを送出してみてください。試してみれば、コピーコンストラクタを定義した意味も分かるはずです。回答数ランキングです。職業心理カウンセラーこの専門家の回答をチェック他の専門家の回答をチェックこのQ&Aを見た人が検索しているワードデストラクタC++このQ&Aと関連する良く見られている質問Qアプリケーション終了時例外エラー(アクセス違反)の調査方法について大変困っています。アプリケーションが終了するときに「アクセス違反」がワトソン博士によって取得されています。当方アプリケーションなどに弱く、解決策の想像が付きません。どなたかご教授お願いいたします。<解決策例>・どういったスキルを持った人にどの様な調査を進めさせれば良いのか。・以前同様な事があり原因は○○だった・恐らく○○だろうなど、お願いいたします。使用頻度:2~3回/(平日)以上、よろしくお願いします。発生頻度が年2回というのはなかなか厳しい条件ですね。「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。http://support.microsoft.com/kb/168006/ja要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB自体は特定のアプリケーションについて書かれていますが、記述されている現象と原因の関係から考えるに、他のアプリケーションでも同様の現象が発生すると思われます。書いた文章を捨てるのがもったいないので(貧乏性)、邪魔かもしれませんが下に続けることにします。上のKBの内容がそれらしいようであれば、読み飛ばしてください。========私であれば、次の手順で調査を行います。「ワトソン博士のログを取得した際に実行していたEXEファイル」をビルドした際、一緒にMAPファイルやCODファイル(リスティングファイル)を作成していれば、そのファイルを用意しておきます。作成していない場合は、「ワトソン博士のログを取得したEXEファイル」と、バイナリレベルで全く同じEXEファイル(バイト単位で比較すると、ファイルに埋め込まれたタイムスタンプ・チェックサム以外は一致する)が作成可能かどうか調べます。(ビルドに必要なソースファイルやビルドオプションに変更を加えていなければ作成可能です。)作成可能であれば、コンパイルオプションに「リスティングファイルタイプ:マシン語コードとソースを含む」、リンクオプションに「MAPファイル作成」を追加してEXEを再作成してください。これで、「ワトソン博士のログを取得した際に実行していたEXEファイル」に対応するMAPファイルとCODファイルが得られます。エラー発生行を特定ワトソン博士のログがどれだけ取れているかにもよりますが、スタックダンプが含まれていればたいていエラー発生行を特定できます。「フォールト->」が含まれる逆アセンブルリストを探します。次に、その下にある「スタックバックトレース」を探します。スタックバックトレースを上から下に順にたどっていくと、そのうち「ReturnAd」(リターンアドレス)がアプリケーションのアドレス範囲(VC++6の標準オプション設定を変更していなければ0x00400000~)に入るところが出てきます。見つかったら、そのアドレスの直前にあるcall命令が例外を発生させたAPIを直接呼び出している場所です。仮にリターンアドレスが0x00401234だったとします。したら、次はMAPファイルを見てこのアドレスがどの関数に属しているか探します。0x00401234というアドレスは見つからないでしょうけれども、これに近いアドレスは見つかるはずです。そのアドレスに対応する関数名もMAPファイルにあります。次はその関数名をCODファイルから探します。見つかったら、MAPファイルにあるアドレスがCODファイルにあるマシン語コードの先頭アドレスになるので、そこからリターンアドレス0x00401234に対応するはずの場所まで順番にアドレスを辿っていきます。関数の先頭アドレスが0x00401200であれば、0x34バイト先を探すわけです。すると、その探した場所にある命令の直前の命令がcall命令になっているはずです。CODファイルには、その場所のC++ソースでの行番号とソース文もコメントとして入っているはずなので、あとは対応するソースをよーく見てエラーの見当をつけてください。アセンブラの知識があれば、そこでcallを使った(他の関数を呼び出した)ときの引数の内容もある程度分かります。(ポインタ渡しだと、そのポインタの先の内容までは分かりませんが。置き換え用EXEファイルと対応するMAPファイル作成これ以降は将来への備えです。コンパイルオプションでデバッグ情報を「プログラムデータベースを使用」、リスティングファイルタイプを「マシン語コードとソースを含む」、リンクオプションで「MAPファイルを作成する」、デバッグ情報「他の種類」を追加してビルドし、出来たEXEファイルを本番用として使用します。同時に作成されるMAPファイル、CODファイル、PDBファイルは保管しておきます。MAPファイル、CODファイルの使い方は上記2.のとおりです。PDBファイルは、もし完全なクラッシュダンプが取得できればWinDbgを使って事後ソースレベルデバッグが可能になりデバッグ作業が非常に楽になるので、念のため取っておきます。ワトソン博士のオプション変更drwtsn32.exeを起動し、「クラッシュダンプファイルの作成」をチェックします。(デフォルトは、チェックが入っています。)クラッシュダンプファイルとEXEとPDBがあればWinDbgで事後ソースレベルデバッグができます。(いわゆるポストモーテムデバッグです。UNIX系でコアダンプしたコアをデバッガで読み込んでデバッグするのと同じ種類のものです。)普段何とも思わずに行っていることでも、文章にすると長いですね・・・えーと、「どういうスキルを持った人に調査させればいいか」については、上記の内容を読んで『なるほど!』と言える人でしょうか。参考URL:http://support.microsoft.com/kb/168006/ja発生頻度が年2回というのはなかなか厳しい条件ですね。「私であれば、次の手順で調査を行います。」という書き始めで延々とデバッグ方法を書いていたのですが、書き終わってからちょっとGoogleで検索したら、ひょっとするとちょうど質問者さんのトラブルと同じかもしれない現象がMicrosoftのKBにありました。http://support.microsoft.com/kb/168006/ja要点をかいつまんで書くと、MSVCRT/MFCのDLLのバージョン不整合でエラーが発生することがある、という内容です。KB...続きを読む他の回答も見るQC++とVC++の違いについてこの質問をご覧頂きありがとうございます。みなさんに2つ、お聞きしたいことがあり、質問させていただきます。Basicは多少勉強はしておりました。オブジェクト指向の基礎程度(多相、継承、カプセル化)は理解しています。抽象的な質問で大変恐縮なのですが、みなさんの経験論や、ご参考にした本、HP等がありましたら、ご教授いただければと思います。Aベストアンサーこんにちは、honiyonです。純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。VC++に限らず、大体はそうです。VBも、BASICコンパイラ+開発環境です。C++として使用するなら良いですが、VC++とMFCを使用してウインドウアプリケーションを作りたいという事であれば、死に物狂いな勉強が必要が必要かもしれません。Windowアプリケーションの処理プロセスを理解していないと、とっても難解に感じると思います。こちらで腕を慣らし、徐々にWindowアプリケーションの処理プロセス(WinMainから始まるプログラムの組み方の事です)を学ぶと良いかな、と思います。VC++&MFCな環境に移行すると、敷居はぐっと低くなります。私は一度VC++&MFCに挫折しましたが、こちらの方法で何とか理解する事が出来ました(^^;参考になれば幸いです(..こんにちは、honiyonです。純正C++に加え、独自に機能(という言い方でいいのかな?)を追加しており、更に開発しやすいソフト(環境)を添付してあります。VC++に限らず、大体はそうです。VBも、BASICコンパイラ+開発環境です。cerrの違いこんにちわ。初歩的な質問だと思うのですが、教えてください。C++で、cerrとcoutの違いは何なのでしょうか?どちらも同じように出力できますし。自分でエラー表示を出力させたいような時にcerrを使えばよいのでしょうか?使い分ける必要がいまいち分かりません。お暇なときにでもお願いします。stdoutどちらもコンソールへの出力ですが、違いはハンドルが違うことです。このため、リダイレクトやパイプのやり方が変わります。http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/stdinout.htmlこの違いを利用すると、通常の出力を標準出力に出力しエラーのみエラー出力にしておくことで、リダイレクトやパイプを利用しているときでも、エラーはコンソールに出力されるので便利になります。route.txtのような書式になります。stdoutどちらもコンソールへの出力ですが、違いはハンドルが違うことです。このため、リダイレクトやパイプのやり方が変わります。http://www-or.amp.i.kyoto-u.ac.jp/algo-eng/db/stdinout.htmlこの違いを利用すると、通常の出力を標準出力に出力しエラーのみエラー出力にしておくことで、リダイレクトやパイプを利用しているときでも、エラーはコンソールに出力されるので便利になります。Windows系では、標...続きを読む他の回答も見るQをVisualStudioでつかえるようにする<unistd.h>をVisualStudioでつかえるようにしたいのですが、問題なくコンパイルできるようにするにはどうしたらいいでしょうか?CygwinというやつをインストールしてやってみたのですがやはりVisualStudioだけでコンパイルしてやりたいのですが。Aベストアンサーおそらく<unistd.h>をフルスペックで利用したいわけではないと思います。その中の一部の関数を使いたいだけなら<io.h>などで代用できるはずですから、ヘルプで調べてみることをお勧めします。ソースを修正せずに、コンパイル&実行ができるようにすることは諦めた方がよいと思います。移植のことを考えるなら、<unistd.h>とか<windows.h>のような環境に特化したヘッダや、そこで宣言される型や関数などを直接使うのではなく、適切にラッピングしてから使う方が後々楽です。今回は仕方ないでしょうが、今後はそうしましょう。ここに処理を書く}という関数が必要なようです。他の回答も見るQC++でのクラスオブジェクトの破棄こんにちは。C++では、プログラムの終了時に、全てのクラスオブジェクトは、デストラクタが呼び出されて破棄されますが、プログラムの途中で、クラスオブジェクトを明示的に破棄する方法はあるのでしょうか?例えば、new演算子によってメモリを動的に割り当てたポインタなら、delete演算子で破棄できますが、クラスオブジェクトにdelete演算子は使えないようです。何かいい方法を知っておられる方がいらっしゃれば、是非アドバイスを頂きたいと思います。LPCTSTRに変換する必要があります。実際にどのようにするのかわかりません。Open()でファイル名を与えるところAPIではないようですが......。http://msdn.microsoft.com/ja-jp/library/ee247566.aspxならば、そのままCStringの変数渡せば、よろしく処理してくれると思いますけど。教えてください!!(...20C#で、pictureBoxのオブジェク...system関数がうまくいかないC#でフォームのオブジェクト名...newしないオブジェクトについて4C++でのクラスオブジェクトの破棄5ビジュアルC++でボタンの有...6CoCreateInstanceでエラーになる。Inc.Q質問する(無料)Q&A検索goo検索gooIDで新規登録・ログイン新規登録する(無料)会員の方はこちら外部サービスのアカウントで新規登録・ログインYahoo!で新規登録・ログインGoogleで新規登録・ログインTwitterで新規登録・ログインFacebookで新規登録・ログインdアカウントで新規登録・ログイン※各種外部サービスのアカウントをお持ちの方はこちらから簡単に登録できます。お客様の許可なしに外部サービスに投稿することはございませんのでご安心ください。会員でない方、会員になるとあなたも質問や回答ができるようになります!!親切・丁寧な回答が集まる場30分以内に回答がもらえ回答数は平均3件!匿名(ニックネーム)での投稿なので。