次の方法で共有


警告 C26404

無効な状態にある可能性がある owner<T> を削除しないでください (r.3)

解説

所有者ポインターがリソースを解放または転送すると、"無効" 状態になります。 このようなポインターを削除すると、二重削除が原因でメモリが即時に破損したり、削除されたリソースが別の所有者ポインターからアクセスされた場合にアクセス違反が発生したりする可能性があります。

コード分析名: DONT_DELETE_INVALID

例 1

その値を転送した後の所有者の削除:

gsl::owner<State*> validState = nullptr;
gsl::owner<State*> state = ReadState();
validState = state;
if (!IsValid(state))
    delete state;   // C26404

例 2

初期化されていない所有者の削除:

gsl::owner<Message*> message;
if (popLast)
    message = ReleaseMessage();
delete message; // C26404