c++ - 在 std::map 中使用 std::auto_ptr 安全吗?

标签 c++ stl smart-pointers c++03

我知道您必须小心使用自动指针(以及为什么),尤其是使用 STL。但我看不出这有什么问题:

std::map<T1, std::auto_ptr<T2> >;

这样安全吗?


我看到它如何在 std::vector 中中断,因为它必须时不时地复制它的项目,但是对于 std 的值类型也是如此吗:: map ?


编辑:显然,无论它是否安全,我都无法(从技术上)填充 map ,但我会保留这个问题以供理论上考虑。否则,将其视为已关闭。

最佳答案

这不安全。从技术上讲,std::auto_ptr 不满足 CopyConstructibleAssignable 的要求,因为使用 auto_ptr 制作的拷贝' s 复制构造函数或复制赋值运算符不等同于复制操作后的复制源。与任何标准容器一起使用的任何类型都必须满足这些要求。

您可能会发现,对于一个特定用例的一种实现,您似乎获得了预期的行为,但如果您违反了容器的要求,您就不能指望您的代码在所有情况下都能正常工作。

关于c++ - 在 std::map 中使用 std::auto_ptr 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8280828/

相关文章:

c++ - GLSL和c有什么区别?

c++ - 与排序模型一起使用时的 Qt TreeView 问题

c++ - 为什么表达式的结果取决于表达式的放置位置?

c++ - 修改排序数组还是每次都对数组排序?

c++ - 从 auto_ptr 转换为普通指针

c++ - 在 C++ 中使用 std::getline() 的签名错误

c++ - 具有智能指针附加继承对象的深拷贝

c++ - 不同平台/系统中限定符大小的变化

即使使用智能指针,C++ 也会在异常情况下泄漏

c++ - 处理 C++ iostream 时的最佳实践