スレッド: [cppll:12819] main関数にtry-catchがない場合のデストラクタ呼び出し

スレッド

[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/

[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@...>

[cppll:12823] Re: main関数にtry-catchがない場合のデストラクタ呼び出し

[ | / | ]
12823
Subject:
[cppll:12823] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
From:
Tietew <tietew@...>
Date:
Mon, 25 Dec 2006 11:59:54 +0900
X-Mailer:
Becky! ver. 2.29 [ja]
Message-Id:
<20061225115431.A740.TIETEW‐at‐tietew.net>
In-Reply-To:
12819
References:
12819
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

[cppll:12824] Re: main関数にtry-catchがない場合のデストラクタ呼び出し

[ | / | ]
Subject:
[cppll:12824] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
From:
Mura . <ope_overlord@...>
Date:
Mon, 25 Dec 2006 05:17:47 +0000
Message-Id:
<BAY104-F23EC6CB3F58DE764C72A3CF1C20‐at‐phx.gbl>
In-Reply-To:
12823
Muraです。

>未処理の例外は unexpected() が呼ばれることになっていて,これの既

terminate() の方ですね。
unexpected()は例外仕様(めった使わないけど)の違反時とかに呼ばれる方です。

_________________________________________________________________
MSNでマイルを貯めて、豪華ビジネスクラス世界一周航空券を当てよう!
http://jp.msn.com/

[cppll:12825] Re: main関数にtry-catchがない場合のデストラクタ呼び出し

[ | / ▼ | ]
12825
Subject:
[cppll:12825] Re: main関数にtry-catchがない場合のデストラクタ呼び出し
From:
Tietew <tietew@...>
Date:
Mon, 25 Dec 2006 16:39:07 +0900
X-Mailer:
Becky! ver. 2.29 [ja]
Message-Id:
<20061225163342.3371.TIETEW‐at‐tietew.net>
In-Reply-To:
12824
References:
12823 12824
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

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here