c++ - 为什么不明显使用`std::shared_ptr`工作?
问题描述
似乎std::shared_ptr<T[]>
(与 C++ 17 一起添加)的明显用途是保存指向 的指针T
,并delete[]
在需要销毁托管对象时使用。但是这段代码:
#include <memory>
int main() {
std::shared_ptr<int[]> sp(new int[3]);
return 0;
}
不能使用我尝试过的任何在线编译器进行编译。在所有情况下,错误消息都是这样的变体:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/memory:3759:18:注意:候选模板被忽略:要求'is_convertible<int *, int (*)[]>::value'不满意 [with _Yp = int] 显式 shared_ptr(_Yp* __p,
也就是说,接受指针的构造函数会被 SFINAED 取出,因为指向元素类型的指针不能转换为指向数组的指针。这似乎在 C++ 17 标准和 C++ 20 中是必需的。
这真的是本意吗?我该如何使用该构造函数?或者,或者,如何在std::shared_ptr
不明确指定删除器的情况下创建正确管理数组的对象?
解决方案
推荐阅读
- excel - 将多个文件从不同文件夹复制到不同的目标文件夹
- reactjs - react.js 设置默认路由
- r - eval(substitute(x), data, parent.frame()) 中的错误:缺少参数“data”,没有默认值
- php - 如何显示和分组帖子?
- ios - 将 UIVisualEffectView 添加到 UIView 大小未知的部分
- jsp - javax.el.ELException:无法解析表达式 [${not empty short}]
- python - 在函数中将网格网格与矩阵乘法相结合的最佳方法
- git - 如何修改 Vivado 2018.3 生成的 tcl 脚本进行版本控制
- android - Sqlite,如何检查字符串是否包含在数据库中的任何值中
- jquery - 复选框的 CSS 函数问题