前提・実現したいこと
C++で数値計算を行っていましたが、最近C#を始めました。
下記の認識で問題ないのか、認識違いをご教示ください。
C#の自作クラスはメモリ解放する必要性があると思うのですが、
いろいろなサイトを読んでも、マネージ/アンマネージリソースが
よく分かりませんでした。
1. C++のDeleteがない → GCが適宜開放する。
・ インスタンスへのアクセスがなくなる。
・ インスタンスポインタ=nullした場合。
・ インスタンスのDispose()を呼んだ場合。
2. 自作クラスには、IDisposeクラスを実装し、オブジェクトを開放する。
・ マネージリソース;.Netのライブラリ?(BitmapやStream)
・ アンマネージリソース;自作クラス?
・ intなどは関係ない?
Disposeの実装は下記でOKなのか?
C#
1 2 class Area {// 自作クラス 3 public double xS { get; set; } = -1; 4 public double xE { get; set; } = -1; 5 6 public double yS { get; set; } = -1; 7 public double yE { get; set; } = -1; 8 9 public Area() { } 10 11 public Area(Area src) { 12 //throw new NotImplementedException(); 13 this.xS = src.xS; 14 this.xE = src.xE; 15 this.yS = src.yS; 16 this.yE = src.yE; 17 return; 18 } 19 }// Area 20 21 class Analysis : IDisposable { 22 23 public Bitmap bitmap { get; set; } 24 public Area area { get; private set; } 25 private byte[] _pixels = null; 26 private int aaa; 27 28// 処理など 29 30 private bool disposedValue = false; // 重複する呼び出しを検出するには 31 protected virtual void Dispose(bool disposing) { 32 if (!disposedValue) { 33 if (disposing) { 34 if (bitmap == null) 35 bitmap.Dispose(); 36 } 37 area = null; 38 _pixels = null; 39 40 disposedValue = true; 41 } 42 } 43 44 public void Dispose() { 45 Dispose(true); 46 // GC.SuppressFinalize(this); 47 } 48 }
補足情報(FW/ツールのバージョンなど)
Win10 pro, VisualStudio 2015pro
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/27 10:46
2018/07/27 11:13 編集
2018/07/30 00:14