3

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;
}

背後に魔法があるのでしょうか、それとも本のコードが正しくないだけですか。アドバイスありがとうございます。

4

2 に答える 2