1. ホーム
  2. c++

[解決済み] const (T const*) へのポインタの削除

2023-01-13 12:46:32

質問

constポインタについて、基本的な質問があります。私は、constポインタを使用してconstでないメンバ関数を呼び出すことは許可されていません。しかし、私はconstポインタ上でこれを行うことが許可されています。

delete p;

これはクラスのデストラクタを呼び出すもので、本質的には非恒等式の'メソッド'です。なぜこれが許されるのでしょうか?これをサポートするためだけなのでしょうか。

delete this;

それとも何か他の理由があるのでしょうか?

どのように解決するのですか?

サポートすることです。

// dynamically create object that cannot be changed
const Foo * f = new Foo;

// use const member functions here

// delete it
delete f;

しかし、この問題は動的に作成されたオブジェクトに限ったことではないことに注意してください。

{
 const Foo f;
 // use it
} // destructor called here

もし const オブジェクト上でデストラクタを呼び出すことができなければ、const オブジェクトを全く使うことができません。