一時構造体のデストラクタが呼ばれない


投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 | 投稿日時 2011/1/3 0:58
convol 
初めまして、convolと申します。

最近D言語をはじめたばかりなのですが、言語仕様でよく分からない所があったので投稿させていただきます。

表題のとおりなのですが、

struct Hoge {
    this(int n) {
        writeln("constructed");
    }
    ~this() {
        writeln("destructed");
    }

    void func() {
        writeln("func is called");
    }
}

void main() {
    Hoge(1).func();
}

のように一時構造体(この呼び方でいいんでしょうか)を作っても

constructed
func is called

としか表示されず、デストラクタが呼び出されていないようなのです。
クラスの場合は、当然ながらデストラクタはきちんと呼び出されるようで、一体どういった理屈なのでしょうか。
よろしくおねがいします。
投票数:28 平均点:4.29
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/1/3 1:44
tama  一人前   投稿数: 111
投票数:15 平均点:2.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/1/3 11:48
SHOO  管理人   投稿数: 658
これが治れば書ける物も多いのに…
たとえばUniquedテンプレート構造体が書けない主な理由がこれだった気がします。
参照カウンタもこれが原因で狂ったりすることがあるので不確実なところがあります。
Issue3516でも私が言っていますが、最近の構造体の使われ方からすれば、これはかなり致命的なバグに含まれると思うので、一刻も早く治ることが望まれています。
投票数:21 平均点:2.38
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011/1/4 23:33
convol 
tamaさん、SHOOさん
回答ありがとうございます。

そうだったんですか、有名なバグだったんですかぁ。

今はTDPL片手に勉強しているところですが、
D言語は細かい所の仕様がいろいろな箇所に分散しているのがちょっと大変ですね。(特に英語の苦手な自分にとっては^^;)
投票数:19 平均点:5.26
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/1/5 2:03
tama  一人前   投稿数: 111
んー,分散しているといっても,公式サイトとTDPLだけのような?
投票数:17 平均点:4.12
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/1/5 21:10
SHOO  管理人   投稿数: 658
[http://d.puremagic.com/issues/buglist.cgi?query_format=advanced&votes=5&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED 5votes以上ついてるバグ]や、何回も報告されているバグは要チェックでしょうかねぇ。

>D言語は細かい所の仕様がいろいろな箇所に分散している

すべてはdmdのソースファイルに集約されています…
というのも酷な話だとは思いますが、仕様としては公式サイトとTDPLにあるのが全てです。Tangoなんてなかった。その他はバグか、アンドキュメンテッド(非公式機能なので、いつなくなるかわからないため、使わないのが無難)です。

Phobosで割と頻繁に使われるアンドキュメンテッド機能といえば、Template!(T)をTemplate!Tと書ける機能でしょうか…
投票数:20 平均点:6.50
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/1/6 2:09
tama  一人前   投稿数: 111
引用:
Phobosで割と頻繁に使われるアンドキュメンテッド機能といえば、Template!(T)をTemplate!Tと書ける機能でしょうか…
数ヶ月前からドキュメント化されてた気がします.
http://digitalmars.com/d/2.0/template.html
投票数:21 平均点:3.33
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011/3/29 20:53
haru-s 
限定的なのかもしれませんが,trunkでは上記のソースでちゃんとデストラクトされるように修正されているようです.
投票数:13 平均点:3.85
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/3/29 21:52
SHOO  管理人   投稿数: 658
引用:

haru-sさんは書きました:
限定的なのかもしれませんが,trunkでは上記のソースでちゃんとデストラクトされるように修正されているようです.
これは朗報
投票数:16 平均点:6.25
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/3/30 6:45
tama  一人前   投稿数: 111
https://github.com/D-Programming-Language/dmd/commit/e764b3949ae0f95f8fc4d7d2e9114e29fee12493
このコミットかな.MLでこのバグをなんとかすると言っていたらしいので,次のリリースではfixされる可能性大ですね.
投票数:14 平均点:6.43
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文

  条件検索へ


メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu