【发布时间】:2014-12-10 08:48:10
【问题描述】:
[util.smartptr.shared.io] 在 C++11 标准中要求 operator<< 用于
shared_ptrs:
template<class E, class T, class Y>
basic_ostream<E, T>& operator<< (basic_ostream<E, T>& os, shared_ptr<Y> const& p);
但是,除非我错过了它,否则我在 [unique.ptr] 中看不到任何类似的东西,并且 en.cppreference.com 上的参考同意。有没有理由 区别?
【问题讨论】:
-
我不确定这个问题是否可以回答。原因是(还)没有人将它纳入标准,但这是你想听到的吗?
-
@KerrekSB 想必他只是想确认它与
make_unique相似。 -
@KerrekSB 这实际上是一个答案。我认为问题是“这是有根本原因,还是只是疏忽?”
-
@Angew:嗯,目前的标准中没有记录的理由不包含这个,但你应该查看提议
unique_ptr的原始文件。我敢打赌,根本没有人想过添加这个功能。它甚至不是一个遗漏,而是一个不存在。该标准以小增量增长,通常是不连贯的,并且没有一些整体的一致性强制执行。如果您认为这不一致并且应该修复,请发送论文 :-) 下一次会议是在 5 月。 -
注意,顺便说一下,
operator<<忽略删除器。在shared_ptr中,删除器是类型擦除的,这会使operator<<变得非常复杂。对于unique_ptr,序列化删除器更有意义,但这会不一致。
标签: c++ c++11 language-lawyer unique-ptr