Bjarne Stroustrup によって書かれた新しい C++ プログラミング言語の本からコードを実行しようとしましたが、動作しないようです。S y {x};
コード内の文法をサポートするコンパイラはどれですか? コンパイルできません。g++、vc++ を試しましたが、まだ Clang ではありません。そのエラー コードは初期化であると思われます。その後、そのコードをS y = x;
代入に変更しましたが、結果をコメントとして出力しませんでした。どこか間違っていますか?
struct S {
int* p; // a pointer
};
S x {new int{0}};
void f()
{
S y {x}; // "copy" x
*y.p = 1; // change y; affects x
*x.p = 2; // change x; affects y
delete y.p; // affects x and y
y.p = new int{3}; // OK: change y; does not affect x
*x.p = 4; // oops: write to deallocated memory
}
次に、C++03 バージョンでコードを書き直しました。次のように、説明どおりに動作します。
struct S
{
int *p;
};
int main()
{
S x;
x.p = new int;
*(x.p) = 0;
S y = x;
*y.p = 1;
*x.p = 2;
delete y.p;
y.p = NULL;
x.p = NULL;
y.p = new int;
*(y.p) = 3;
*(x.p)= 4;
}
背後に魔法があるのでしょうか、それとも本のコードが正しくないだけですか。アドバイスありがとうございます。