応答を書く際に、constポインターがどのように機能するかについての私の仮定に異議を唱えるいくつかのコードを書きました。constポインターは削除関数で削除できないと思っていましたが、以下のコードからわかるように、そうではありません。
#include <new>
#include <string.h>
class TestA
{
private:
char *Array;
public:
TestA(){Array = NULL; Array = new (std::nothrow) char[20]; if(Array != NULL){ strcpy(Array,"Input data"); } }
~TestA(){if(Array != NULL){ delete [] Array;} }
char * const GetArray(){ return Array; }
};
int main()
{
TestA Temp;
printf("%s\n",Temp.GetArray());
Temp.GetArray()[0] = ' '; //You can still modify the chars in the array, user has access
Temp.GetArray()[1] = ' ';
printf("%s\n",Temp.GetArray());
//Temp.GetArray() = NULL //This doesn't work
delete [] Temp.GetArray(); //This works?! How do I prevent this?
}
私の質問は、削除関数が何らかの苦情や例外をスローすることで、ポインターを削除できないようにしながら、ユーザーアクセスをポインターに渡す(ユーザーがchar配列のように使用できるようにする)にはどうすればよいですか?