2

生のポインターからスマート ポインターに移行することにしたので、http://en.cppreference.com/w/cpp/memory/auto_ptrを読むことから始めることができます。

そこでは、彼らがに特化していることがわかりましたvoid

どうしてこれなの?どんな場面でも役に立ちますか?

4

2 に答える 2

6

これはLWG 541で行われました。問題には完全な根拠があります。しかし、要するに、それは当時のものとの互換性のために行われましたstd::tr1::shared_ptr(後に に標準化されましたstd::shared_ptr)。

生のポインターからスマート ポインターへの移行を検討している場合はunique_ptr、 を優先して使用することを強くお勧めしますauto_ptrauto_ptrは非推奨であり、正当な理由があります。 unique_ptrの推奨代替品ですauto_ptr

auto_ptrこれは、 を非推奨にし、 に置き換える理由を説明するリンクunique_ptrです。

于 2013-09-07T15:54:48.730 に答える
2

std::auto_ptrC++11 から廃止されました。代わりにstd::shared_ptrandのような他のスマート ポインターを検討することを検討してください。unique_ptr

あなたの質問に対する答えは (私が知る限り):内部の raw ポインターのメモリを解放するためにstd::auto_ptr使用しますが、void は不完全な型であり、オブジェクトの型になることはできないため、削除はまったく意味がありません。削除する前に、ポイントされたデータの対応するタイプに void* をキャストする必要があります。したがって、このスマート ポインターは、機能の少ない特殊化を提供します (参考文献では、void 特殊化にはメンバー関数がないことが示されていることに注意してください)。deletevoid*void

于 2013-09-07T15:47:35.940 に答える