87885


C++であるクラスのインスタンスがすでに有効化されているかの判定はどうすればいいのでしょう  
deleteしてもnullになるわけでは無いし、正規の方法はどうするのが良いのでしょう

[code]

    ClassA Ca = new ClassA();
    ・・・
    delete Ca;
    
[/code]

[code]

    //★Caが有効かどうかの判定をしたい
    ClassA Ca = new ClassA();
    delete Ca;
    
[/code]


CC BY-SA 4.0
2022-03-18T02:07:35.760
87884
2022-03-18T02:28:58.640
15047
question
c++ class
C++でnewされたクラスの判定


表記としては、有効化というよりは「無効化されている」のほうが適切かも？

`delete Ca;` のあとは

  * ポインタ変数 `Ca` の値は変化しない
  * ポインタ変数 `Ca` の指す先にあったオブジェクトは処分され無効になっている
  * 時と場合によっては `Ca` の指す先には別のオブジェクトが既に作成済みかもしれない

Q. 無効化された `Ca` の先を使うことを検出する技法は何かないか？  
A1. 生ポインタ変数を使う限り、ないです。  
A2. スマートポインタを使うことで、ある程度できます。  
いやむしろスマートポインタのみ使い、生ポインタと `new` / `delete` を排除するのが現代流です。

[C++11のスマートポインタが使える場合に、new,
deleteは必要なのか](https://ja.stackoverflow.com/questions/33665/)

ワンチップマイコンな組み込み系だと `new` 自体が禁じ手だったり...


CC BY-SA 4.0
2022-03-18T02:28:58.640
87885
2022-03-18T02:28:58.640
8589
87884
answer