11

私が持っている場合

Class *a1 = new Class();
Class *b1 = a1;

delete b1;
delete a1; //this will give a double free or corruption message;

ポインタbを削除すると、ポインタaを削除するのと同じですよね? この 2 つは Class の同じインスタンスを指しているためです。では、a1 のインスタンスを b1 にコピーして、b1 を削除しても a1 が削除されないようにするにはどうすればよいでしょうか。

Class *a1 = new Class();
Class *b1 = a1;

//how do I duplicate the instance a1 is pointing
//so that when I delete b1, a1 still exists.

delete b1; 
delete a1; //this is still valid 

ありがとう。

4

1 に答える 1

14

ポインターと割り当てを使用している理由はありますか? それ以外の場合は、次のように簡単です

Class a1;
...
Class b1 = a1;

ここで削除する必要はありません。

構造をそのまま維持する必要がある場合は、次のことを行う必要があります

Class *a1 = new Class();
Class *b1 = new Class(*a1);

また

Class *a1 = new Class();
Class *b1 = new Class();
*b1 = *a1;

これは、有効なコピー コンストラクター (例: #1) または代入演算子 (例: #2) があることを前提としています。

ps:std::unique_ptrより安全にするために、生のポインターの代わりに使用してみてください。

于 2012-12-27T06:16:12.367 に答える