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

为什么是这样?在队列中使用共享指针是否安全(共享指针的引用计数是否会在弹出时变为 0)?

4

2 回答 2

5

那是因为std::queue没有queue方法。你可能在追求std::queue::push.

stringQueue.push(oneSharedPtr);

注意:您对std::shared_ptr此处的使用不正确,因为您正在传递一个新数组。有几种方法可以解决此问题:

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 回答
0

你的意思

#include <queue>
#include <memory>

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

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

? std::queue没有queue方法。例如,始终使用来检查可用的内容:d

http://ideone.com/dx34N8

于 2013-06-05T09:28:42.503 回答