私は現在C++を学ぼうとしています。学習するとき、私は言語と記憶がどのように機能するかを理解するために奇妙なことを試みるのが好きです。今、私は構築時に設定された文字の配列を持つクラスを作成しようとしています。私のクラスの唯一のメソッドは、引数のポインターを介して配列を取得できるようにすることです。クラスは正常に作成され、正常に機能しますが、配列の値を変更しないようにすることで、クラスの安全性を高めたいと考えています。
これは私がこれまでに持っているものです:
#import <stdio.h>
class MyClass {
public:
char const * myArray;
MyClass(char inputChar[]){
myArray = inputChar;
}
void get(const char * retVal[]){
*retVal = myArray;
}
};
int main(){
char myString[] = {'H','E','L','L','O'};
MyClass somethingNew = MyClass(myString);
const char * other = new char[4];
somethingNew.get(&other);
std::cout << other[0];
return 0;
}
間接参照演算子を使用して配列の値をまったく変更できないことに気づきました。
myArray[0] = 'h';
これは良いことですが、myArray[0]が指すポインタを変更できないという意味ではありません。
*(&myArray) = new char('h');
これを防ぐ方法はありますか?
- - 解像度 - -
#import <stdio.h>
typedef const char * const constptr;
class MyClass {
public:
constptr * myArray;
MyClass(constptr inputChar) {
myArray = &inputChar;
}
void get(constptr * retVal){
retVal = myArray;
}
};
int main(){
char myString[] = "Hello";
MyClass somethingNew(myString);
constptr other = new char[4];
somethingNew.get(&other);
std::cout << other[0];
return 0;
}
これは、次のいずれも実行できないことを意味します。
*myArray[0] = 'h';
*myArray = new char[4];
*&*myArray = new char('h');
しかし、私はこれを行うことができます:
myArray = &inputChar;