考虑以下代码:
#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)?
最佳答案
那是因为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]);
关于c++ - 将 std::queue 与 shared_ptr 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936037/