標準は、デストラクタからstd::unique_ptr
を正しく呼び出すdelete[]
のテンプレート特殊化を提供します。
void func()
{
std::unique_ptr< int[] > arr(new int[10]);
.......
}
std::shared_ptr
では、この特殊化は利用できないため、delete[]
を正しく呼び出す削除機能を提供する必要があります。
void func()
{
// Usage
shared_ptr array (new double [256], [](double* arr) { delete [] arr; } );
..............
}
これは単に見落としですか? (std::copy_if
があるのと同じ方法で)または理由がありますか?
LWG(C++委員会のライブラリワーキンググループ)は可能性を簡単に検討しましたが、そのアイデアには議論の余地がありました。論争は主に、投棄された可能性がある_shared_ptr<T[]>
_提案に追加された機能に関するものでした(_shared_ptr<T[]>
_の算術)。
しかし、最終的に本当の本当の理由は、議論されたものの、LWGの前でこれを行うための実際の書面による提案がなかったことです。それは、誰かの優先リスト(私のリストを含む)を十分に泡立たせず、提案書を作成するための時間を費やすことはありませんでした。
数人のLWGメンバー間で、このトピックに関して非公式の会話が最近新たに始まり、私は個人的にそれをプロトタイプ化しました。しかし、それについての書面による提案はまだありません。私はそれがツールボックスのまともな追加ツールになると思います。それが実際に起こるかどうかは誰にも分からない。
更新
_shared_ptr
_の配列サポートにドラフトTSが追加されました:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4077.html
更新(2017)
これは現在、C++ 17でサポートされています。 shared_ptr::shared_ptr()
のケース3を参照してください