スレッド: [cppll:12819] main関数にtry-catchがない場合のデストラクタ呼び出し
スレッド
- 12819: くだらないと言えばくだらない話なのですが、 下記のようなコードを書いてVC++ 8.0で実行した Takashi kawasaki
- ├12821: 「プログラミング言語C++第3版」、14.7より: 例外がキャッチされなかったためにプログラムが終 Akihiko Matuura
- └12823: 未処理の例外は unexpected() が呼ばれることになっていて,これの既 定の動作は abort() なので,デス Tietew
- └12824: terminate() の方ですね。 unexpected()は例外仕様(めった使わないけど)の違反時とかに呼ばれる方で Mura .
- └12825: oops! そうでした。 PR] http://ml.tietew.jp:3000/cppll 新MLアーカイブ作成CHU -[ Tietew ]--- tietew‐at‐tietew.net / tie Tietew
[cppll:12819] main関数にtry-catchがない場合のデストラクタ呼び出し
- Subject:
- [cppll:12819] main関数にtry-catchがない場合のデストラクタ呼び出し
- From:
- Takashi kawasaki <espresso@...>
- Date:
- Mon, 25 Dec 2006 02:26:49 +0900
- X-Mailer:
- Microsoft Office Outlook 12.0
- Message-Id:
- <039101c72780$b227d300$16777900$‐at‐iij4u.or.jp>
川崎と申します。
# 直前に誤って、HTMLメールで送信してしまいました。申し訳ありません。
くだらないと言えばくだらない話なのですが、
下記のようなコードを書いてVC++ 8.0で実行したところ、~Testは
呼び出されませんでした。これって規定された動作なのでしょうか?
それとも未定義な動作なのでしょうか?
#include <iostream>
class Test
{
public:
Test() {std::cout << "Test()" << std::endl;}
~Test() {std::cout << "~Test()" << std::endl;} };
int main()
{
Test test;
throw 1;
}
try-catchしない奴が悪いと言われればそうなのですが、
void func()
{
Test test;
throw 1;
}
int main()
{
func();
}
とすれば確実にデストラクタを呼び出せるので、ある意味では動作
に一貫性がないとも思えます。デストラクタで結構大事な処理をし
ていたりする場合に悲しいことが起きそうです。
------
Takashi Kawasaki <espresso@...>
http://d.hatena.ne.jp/espresso3389/
http://eside.homeip.net/
# 直前に誤って、HTMLメールで送信してしまいました。申し訳ありません。
くだらないと言えばくだらない話なのですが、
下記のようなコードを書いてVC++ 8.0で実行したところ、~Testは
呼び出されませんでした。これって規定された動作なのでしょうか?
それとも未定義な動作なのでしょうか?
#include <iostream>
class Test
{
public:
Test() {std::cout << "Test()" << std::endl;}
~Test() {std::cout << "~Test()" << std::endl;} };
int main()
{
Test test;
throw 1;
}
try-catchしない奴が悪いと言われればそうなのですが、
void func()
{
Test test;
throw 1;
}
int main()
{
func();
}
とすれば確実にデストラクタを呼び出せるので、ある意味では動作
に一貫性がないとも思えます。デストラクタで結構大事な処理をし
ていたりする場合に悲しいことが起きそうです。
------
Takashi Kawasaki <espresso@...>
http://d.hatena.ne.jp/espresso3389/
http://eside.homeip.net/
[cppll:12821] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
- Subject:
- [cppll:12821] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
- From:
- Akihiko Matuura <matuura@...>
- Date:
- Mon, 25 Dec 2006 11:09:55 +0900
- X-Mailer:
- Becky! ver. 2.29 [ja]
- Message-Id:
- <20061225110600.A8C9.MATUURA‐at‐core.co.jp>
- In-Reply-To:
- 12819
- References:
- 12819
こんにちは、松浦@札幌です。
# 札幌はイブの朝にドカ雪が降ってびっくりでした
> 下記のようなコードを書いてVC++ 8.0で実行したところ、~Testは
> 呼び出されませんでした。これって規定された動作なのでしょうか?
> それとも未定義な動作なのでしょうか?
処理系依存みたいです。
「プログラミング言語C++第3版」、14.7より:
例外がキャッチされなかったためにプログラムが終了する時、デストラク
タを呼び出すかどうかは、処理系によって決められる。
ISでどうなっているかは、どなかフォロー願います。
--
松浦 明彦 <matuura@...>
# 札幌はイブの朝にドカ雪が降ってびっくりでした
> 下記のようなコードを書いてVC++ 8.0で実行したところ、~Testは
> 呼び出されませんでした。これって規定された動作なのでしょうか?
> それとも未定義な動作なのでしょうか?
処理系依存みたいです。
「プログラミング言語C++第3版」、14.7より:
例外がキャッチされなかったためにプログラムが終了する時、デストラク
タを呼び出すかどうかは、処理系によって決められる。
ISでどうなっているかは、どなかフォロー願います。
--
松浦 明彦 <matuura@...>
[cppll:12823] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
Tietew です。
On Mon, 25 Dec 2006 02:26:49 +0900
In article <039101c72780$b227d300$16777900$@iij4u.or.jp>
[[cppll:12819] main関数にtry-catchがない場合のデストラクタ呼び出し]
"Takashi kawasaki" <espresso@...> wrote:
> くだらないと言えばくだらない話なのですが、
> 下記のようなコードを書いてVC++ 8.0で実行したところ、~Testは
> 呼び出されませんでした。これって規定された動作なのでしょうか?
> それとも未定義な動作なのでしょうか?
未処理の例外は unexpected() が呼ばれることになっていて,これの既
定の動作は abort() なので,デストラクタすら呼ばれずにコアダンプ
するのが正しい動作だったかと思います。
> とすれば確実にデストラクタを呼び出せるので、ある意味では動作
> に一貫性がないとも思えます。デストラクタで結構大事な処理をし
> ていたりする場合に悲しいことが起きそうです。
デストラクタを呼び出すほうが悲しいでしょう。なぜって,デバッグで
きなくなるじゃないですか。
PR] http://ml.tietew.jp:3000/cppll 新MLアーカイブ作成CHU
—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab. http://www.tietew.net/
★C++:language&librariesログ&なまず http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA
On Mon, 25 Dec 2006 02:26:49 +0900
In article <039101c72780$b227d300$16777900$@iij4u.or.jp>
[[cppll:12819] main関数にtry-catchがない場合のデストラクタ呼び出し]
"Takashi kawasaki" <espresso@...> wrote:
> くだらないと言えばくだらない話なのですが、
> 下記のようなコードを書いてVC++ 8.0で実行したところ、~Testは
> 呼び出されませんでした。これって規定された動作なのでしょうか?
> それとも未定義な動作なのでしょうか?
未処理の例外は unexpected() が呼ばれることになっていて,これの既
定の動作は abort() なので,デストラクタすら呼ばれずにコアダンプ
するのが正しい動作だったかと思います。
> とすれば確実にデストラクタを呼び出せるので、ある意味では動作
> に一貫性がないとも思えます。デストラクタで結構大事な処理をし
> ていたりする場合に悲しいことが起きそうです。
デストラクタを呼び出すほうが悲しいでしょう。なぜって,デバッグで
きなくなるじゃないですか。
PR] http://ml.tietew.jp:3000/cppll 新MLアーカイブ作成CHU
—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab. http://www.tietew.net/
★C++:language&librariesログ&なまず http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA
[cppll:12824] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
Muraです。
>未処理の例外は unexpected() が呼ばれることになっていて,これの既
terminate() の方ですね。
unexpected()は例外仕様(めった使わないけど)の違反時とかに呼ばれる方です。
_________________________________________________________________
MSNでマイルを貯めて、豪華ビジネスクラス世界一周航空券を当てよう!
http://jp.msn.com/
>未処理の例外は unexpected() が呼ばれることになっていて,これの既
terminate() の方ですね。
unexpected()は例外仕様(めった使わないけど)の違反時とかに呼ばれる方です。
_________________________________________________________________
MSNでマイルを貯めて、豪華ビジネスクラス世界一周航空券を当てよう!
http://jp.msn.com/
[cppll:12825] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
Tietew です。
On Mon, 25 Dec 2006 05:17:47 +0000
In article <BAY104-F23EC6CB3F58DE764C72A3CF1C20@phx.gbl>
[[cppll:12824] Re: main関数にtry-catchがない場合のデストラクタ呼び出し]
"Mura ." <ope_overlord@...> wrote:
> >未処理の例外は unexpected() が呼ばれることになっていて,これの既
>
> terminate() の方ですね。
> unexpected()は例外仕様(めった使わないけど)の違反時とかに呼ばれる方です。
oops!
そうでした。
# void foo() throw(int) {
# throw std::runtime_error("some error");
# }
# ここで呼ばれるのが unexpected()
PR] http://ml.tietew.jp:3000/cppll 新MLアーカイブ作成CHU
—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab. http://www.tietew.net/
★C++:language&librariesログ&なまず http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA
On Mon, 25 Dec 2006 05:17:47 +0000
In article <BAY104-F23EC6CB3F58DE764C72A3CF1C20@phx.gbl>
[[cppll:12824] Re: main関数にtry-catchがない場合のデストラクタ呼び出し]
"Mura ." <ope_overlord@...> wrote:
> >未処理の例外は unexpected() が呼ばれることになっていて,これの既
>
> terminate() の方ですね。
> unexpected()は例外仕様(めった使わないけど)の違反時とかに呼ばれる方です。
oops!
そうでした。
# void foo() throw(int) {
# throw std::runtime_error("some error");
# }
# ここで呼ばれるのが unexpected()
PR] http://ml.tietew.jp:3000/cppll 新MLアーカイブ作成CHU
—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab. http://www.tietew.net/
★C++:language&librariesログ&なまず http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA