1

次のコードを検討してください。

#include <queue>
#include <memory>

std::shared_ptr<char> oneSharedPtr(new char[100]);

std::queue<std::shared_ptr<char>> stringQueue;
stringQueue.queue(oneSharedPtr);

これにより、

error C2274: 'function-style cast' : illegal as right side of '.' operator

どうしてこれなの?キューで共有ポインターを使用しても安全ですか (共有ポインターの参照カウントは pop で 0 になりますか)?

4

2 に答える 2

5

これは、std::queueにメソッドがないqueueためです。あなたはおそらく後std::queue::pushです。

stringQueue.push(oneSharedPtr);

: std::shared_ptrnewed 配列を渡しているため、ここでの使用は正しくありません。これを修正するには、いくつかの方法があります。

1) を呼び出すデリータを渡しますdelete[]:

std::shared_ptr<char> oneSharedPtr(new char[100], 
                                   [](char* buff) { delete [] buff; } ); 

2) が機能する配列のような型を使用しdeleteます。

std::shared_ptr<std::array<char,100>> oneSharedPtr1(new std::array<char,100>());
std::shared_ptr<std::vector<char>> oneSharedPtr2(new std::vector<char>);
std::shared_ptr<std::string> oneSharedPtr3(new std::string());

3) 使用boost::shared_array

boost::shared_array<char> oneSharedArray(new char[100]);
于 2013-06-05T09:20:50.813 に答える