2017-08-17 8 views
-6

これがVS2015で動作するかどうか教えてください。char []またはint []でmake_sharedを使用する

shared_ptr< char> buffer(make_shared< array< char,10>>() , [] (char *p){delete[] p; }); 

または

shared_ptr< char> buffer(make_shared< array< int,10>>() ,default_delete< int[]>()); 
+1

試してみてください。あなたが便利なコピーを持っていない場合は、オンラインコンパイラがあります... – xaxxon

答えて

0

のVisual Studio 2015 C++ 17標準をサポートしていません。 C++ 17以前の標準では、std::shared_ptr<T[]>ポインタを持つことはできません。しかし、C++ 17でも、std::make_shared関数は配列型をサポートしていないので、代わりにboost::make_sharedを使用する必要があります。別の方法は、アレイタイプをサポートするstd::make_uniqueと組み合わせてユニークポインタを使用することです。 STDの

存在::アレイ用unique_ptrを、あなたにだけ 知的関心のあるべき、理由:これは、再び彼の「有効 現代C++」本の中でスコットマイヤーズで指摘したように、良いアイデアではないかもしれませんstd :: array、std :: vector、および std :: stringは、生の配列 よりもデータ構造の選択が事実上常に優れています。

+0

あなたは[この回答を見ることができます](https://stackoverflow.com/questions/13061979/shared-ptr-to-an-array- @ Baum mit Augenによって私に示唆されたように、私は使用すべきである(13062069#13062069)。 – Ron

+0

その答えは明示的な新しいものを使用し、私の問題はそれを取り除くことです。 std :: shared_ptr p(新しいint [10]、std :: default_delete ()); // VS2015では正常に動作します。 make_sharedを使って明示的に新しいものを取り除くことは可能ですか?ありがとう –

関連する問題