移動構築の目的で移動されたオブジェクトを、破棄のみ可能な状態のままにしておくことは合法/適切なc++ 0xですか? 例えば:
class move_constructible {...};
int main()
{
move_constructible x;
move_constructible y(std::move(x));
// From now on, x can only be destroyed. Any other method will result
// in a fatal error.
}
記録のために、割り当てられたメモリ領域を常に指しているはずのポインターメンバーを使用して、c++ クラスの ac 構造体をラップしようとしています。すべての C ライブラリ API は、この前提に依存しています。しかし、この要件は、移動後も x が有効なオブジェクトのままであるためには、独自の割り当てられたメモリ領域が必要になるため、真に安価な移動コンストラクタを作成することを妨げます。c API から対応するクリーンアップ関数を呼び出す前に、最初に NULL ポインターをチェックするようにデストラクタを作成しました。これにより、移動後に少なくとも構造体を安全に破棄できます。