生のポインターからスマート ポインターに移行することにしたので、http://en.cppreference.com/w/cpp/memory/auto_ptrを読むことから始めることができます。
そこでは、彼らがに特化していることがわかりましたvoid
。
どうしてこれなの?どんな場面でも役に立ちますか?
生のポインターからスマート ポインターに移行することにしたので、http://en.cppreference.com/w/cpp/memory/auto_ptrを読むことから始めることができます。
そこでは、彼らがに特化していることがわかりましたvoid
。
どうしてこれなの?どんな場面でも役に立ちますか?
これはLWG 541で行われました。問題には完全な根拠があります。しかし、要するに、それは当時のものとの互換性のために行われましたstd::tr1::shared_ptr
(後に に標準化されましたstd::shared_ptr
)。
生のポインターからスマート ポインターへの移行を検討している場合はunique_ptr
、 を優先して使用することを強くお勧めしますauto_ptr
。 auto_ptr
は非推奨であり、正当な理由があります。 unique_ptr
の推奨代替品ですauto_ptr
。
auto_ptr
これは、 を非推奨にし、 に置き換える理由を説明するリンクunique_ptr
です。
std::auto_ptr
C++11 から廃止されました。代わりにstd::shared_ptr
andのような他のスマート ポインターを検討することを検討してください。unique_ptr
あなたの質問に対する答えは (私が知る限り):内部の raw ポインターのメモリを解放するためにstd::auto_ptr
使用しますが、void は不完全な型であり、オブジェクトの型になることはできないため、削除はまったく意味がありません。削除する前に、ポイントされたデータの対応するタイプに void* をキャストする必要があります。したがって、このスマート ポインターは、機能の少ない特殊化を提供します (参考文献では、void 特殊化にはメンバー関数がないことが示されていることに注意してください)。delete
void*
void