标准::unique_ptr ostream 插入器
std::unique_ptr ostream inserter
我已经在 gcc 4.4.6 中使用 -std=c++0x 选项启用了unique_ptr。 它似乎运行良好,正是我所需要的 - 带有自定义删除器的作用域指针。
但是我确实注意到了一个问题。
typedef std::unique_ptr<X> XPtr;
XPtr ptr1(new X);
XPtr ptr2(new X);
std::cout << "ptr1 points to " << ptr1 << std::endl;
std::cout << "ptr2 points to " << ptr2 << std::endl;
显示: PTR1 指向 1 PTR2 指向 1
我认为 ostream 插入器正在插入布尔值。
以下内容修复了它,但我想知道这是否不应该是标准库的一部分。
template<typename Target, typename Deleter>
std::ostream & operator <<( std::ostream & out, const std::unique_ptr<Target, Deleter> & value)
{
// output the raw pointer
out << value.get();
return out;
}
所以问题是:这是 gcc 中当前unique_ptr实现的限制,还是我对unique_ptr的期望过高?
这似乎是 gcc 4.4.6 附带的库中的一个错误。转换是
explicit operator bool() const noexcept;
并且不应通过尝试将指针插入 ostream
.这应该会导致编译错误,即确切地说,GCC 4.7 上会发生什么。
编辑:gcc 4.4不支持显式转换运算符,因此这在当时不起作用。您应该获得更新的 gcc 版本才能真正使用 C++11。
unique_ptr
operator bool() const
定义,因此您看到的是unique_ptr对象被转换为布尔值。如您所发现的,要打印指针的地址,您需要使用 get()
方法。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- ostream过载时的缓冲区冲洗
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- ostream 插入运算符与其非成员重载之间的关系
- 将模板参数插入到ostream中
- 无法将数字插入到基于 char16_t 的自定义C++ ostream/streambuf
- 标准::unique_ptr ostream 插入器
- 使用指针数组中的对象调用重载的友元 ostream 插入运算符将返回内存地址
- 如何用c++在ostream中插入缓冲区
- 使用std::ostream在每行之前插入文本
- C++流插入运算符的返回类型是否需要是std::ostream
- (从 istream 中提取并插入到 ostream 中)操作:是>><T>操作系统;