c++ - 将 std::queue 与 shared_ptr 一起使用?

标签 c++ stl include std shared-ptr

考虑以下代码:

#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/

相关文章:

c++ - 是否可以确保在编译时最多调用一次 constexpr 函数?

c++ - 哪个 Windows API 用于 Windows 安全代理身份验证对话框?

c++ - 为什么返回 std::vector 仍然在制作拷贝?

html - 将一个 HTML 文件导入另一个 HTML 文件

php - 从 PHP 中生成的多个动态 HTML 表制作 MySQL 插入

tsql - SQL 中的常量和包含文件

c++ - Windows Phone 8 上的性病

c++ - C++中的多种功能

c++ - 关联容器作为函数模板参数

c++ - 在 vector 的排序 vector 中查找特定值的索引范围