C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 記憶領域の解放を明示的に


(過去ログ 19 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■7971 / inTopicNo.1)  記憶領域の解放を明示的に
  
□投稿者/ 萩泉 (7回)-(2007/09/20(Thu) 18:05:12)

分類:[C#] 

2007/09/21(Fri) 11:55:13 編集(投稿者)
こんばんは、お世話になります。

使用言語はMicrosoftVisualStudio2005のC#です。
パソコンはMicrosoft Windows XP Professionalです。

この前のVC++ 6.0からVC# 2005への移行の続きなのですが…。

たとえばこんなVC++のクラスがあります。
class Myclass
{
    public Myclass()
    {
    }
    ~Myclass()
    {
    }
    public Open()
    {
         if (m_instance == null)
             m_instance =new Myclass();

         return m_instance;
    }
    public Close()
    {
    	if (m_instance != null)
    	{
                  delete m_instance;
    		m_instance = null;
    	}
    }
}

Close()を呼べばm_instanceがdeleteされるときにデストラクタが作動しますよね?

これをC#でやるときには、Deleteに相当する動作はあるのでしょうか?
newでインスタンスを生成したものを解放するということでいいのでしょうけど…。

ガベージコレクションのおかげで領域管理が楽になったとあるのですが、
いつそれが行われるかわからないので心配なんです

引用返信 編集キー/
■7991 / inTopicNo.2)  Re[1]: 記憶領域の開放を明示的に
□投稿者/ 中博俊 (1160回)-(2007/09/20(Thu) 22:51:20)
中博俊 さんの Web サイト
> ガベージコレクションのおかげで領域管理が楽になったとあるのですが、
> いつそれが行われるかわからないので心配なんです。

で?
引用返信 編集キー/
■7993 / inTopicNo.3)  Re[2]: 記憶領域の開放を明示的に
□投稿者/ Tom Yama (6回)-(2007/09/20(Thu) 23:04:23)
> 記憶領域の開放を明示的に
解放
引用返信 編集キー/
■7996 / inTopicNo.4)  Re[3]: 記憶領域の開放を明示的に
□投稿者/ 囚人 (174回)-(2007/09/20(Thu) 23:15:15)
>これをC#でやるときには、Deleteに相当する動作はあるのでしょうか?
>newでインスタンスを生成したものを開放するということでいいのでしょうけど…。
>
>ガベージコレクションのおかげで領域管理が楽になったとあるのですが、
>いつそれが行われるかわからないので心配なんです。


訊きたい事が何なのかよくわかりませんが、C++ の delete に相当するものをコードで書くことはできません。
ガベージコレクションが動作するタイミングを制御することはできなくはないですが、やらない方が良いです。放っておけばよいです。
引用返信 編集キー/
■8004 / inTopicNo.5)  Re[1]: 記憶領域の開放を明示的に
□投稿者/ Jitta on the way (12回)-(2007/09/21(Fri) 07:05:38)
No7971 (萩泉 さん) に返信

コンストラクタを隠さないと
引用返信 編集キー/
■8011 / inTopicNo.6)  Re[2]: 記憶領域の解放を明示的に
□投稿者/ 萩泉 (8回)-(2007/09/21(Fri) 09:26:10)
2007/09/21(Fri) 09:28:14 編集(投稿者)

皆さんありがとうございます。

誤字の指摘ありがとうございます。
すぐに直させていだたきました。

>訊きたい事が何なのかよくわかりませんが、C++ の delete に相当するものをコードで書くことはできません。
>ガベージコレクションが動作するタイミングを制御することはできなくはないですが、やらない方が良いです。放っておけばよいです。

そうですか…明示的な解放はできませんか。
わかりました、ありがとうございます。


>コンストラクタを隠さないと

これはどういう意味でしょうか?
中身は省いていますが、オーバーライトして、中で操作をしているのですが…。
引用返信 編集キー/
■8012 / inTopicNo.7)  Re[3]: 記憶領域の解放を明示的に
□投稿者/ 囚人 (175回)-(2007/09/21(Fri) 09:37:12)
>>コンストラクタを隠さないと
>
>これはどういう意味でしょうか?
>中身は省いていますが、オーバーライトして、中で操作をしているのですが…。


Myclass.Open() で new するなら、他のクラスが操作できないように MyClass のコンストラクタは private か protected にしておけと言いたいんでしょう。
まぁそもそも、Open() も Close() もクラスメソッドではないので、クラスとしては変ですから、ただの例なんですよね。
引用返信 編集キー/
■8021 / inTopicNo.8)  Re[4]: 記憶領域の解放を明示的に
□投稿者/ 萩泉 (9回)-(2007/09/21(Fri) 11:54:49)
すばやい返信ありがとうございます。

> Myclass.Open() で new するなら、他のクラスが操作できないように MyClass のコンストラクタは private か protected にしておけと言いたいんでしょう。
あ、そうですね。
つい、関数はpublic、変数はpriveteとしてしまっていました。
すぐにpriveteになおします。

> まぁそもそも、Open() も Close() もクラスメソッドではないので、クラスとしては変ですから、ただの例なんですよね。
あっ、今確認したら public static CLogFileCS Instance() でした。;;

簡単に書いただけだったので…;
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -