gpt4 book ai didi

c++ - 'auto_ptr' 和 STL 容器 : writing an example of erroneous usage

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:45 25 4
gpt4 key购买 nike

阅读本教程后提出的问题: http://www.cprogramming.com/tutorial/auto_ptr.html

您可以在其中找到以下声明:此行为的一个微妙结果是 auto_ ptrs 并非在所有情况下都能正常工作。例如,在标准模板库中使用 auto _ptr 对象可能会导致问题,因为 STL 中的某些函数可能会复制容器中的对象,例如 vector 容器类。一个例子是 sort 函数,它复制正在排序的容器中的一些对象。因此,这个拷贝可以轻松删除容器中的数据!

大多数关于“auto_ptr”的论文告诉我们如下内容:“永远不要将‘auto_ptr’与 STL 容器一起使用!它们经常在执行内部操作时复制它们的元素。例如考虑 std::vector 上的sort”。

所以我的目标是编写说明这一点的代码示例或证明此类示例仅在理论上是正确的而在实践中很奇怪

附言@everybody_who_also_knows_that_auto_ptr_is_deprecated我也知道这个。但是您不考虑可能不允许使用新指针容器的技术原因(遗留代码或旧编译器)吗?而且这个问题是关于旧的和坏的(如果你愿意的话)auto_ptr

最佳答案

我现在没有MSVC,但是从g++的错误来看,我猜是这个原因:

auto_ptr<T>只有一个采用可变引用的“复制构造函数”(§D.10.1.1[auto.ptr.cons]/2–6):

auto_ptr(auto_ptr& a) throw();
template<class Y> auto_ptr(auto_ptr<Y>& a) throw();

但是vector::push_back将接受常量引用 (§23.3.6.1[vector.overview]/2)。

void push_back(const T& x);

因此不可能通过 push_back 构造 auto_ptr,因为没有构造函数采用 const 引用。

关于c++ - 'auto_ptr' 和 STL 容器 : writing an example of erroneous usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com