问题标签 [auto-ptr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2040 浏览

c++ - 为什么 vector.push_back(auto_ptr) 不会编译?

我了解到 STL 可以禁止程序员将 auto_ptr 放入容器中。例如以下代码将无法编译:

auto_ptr 有拷贝构造函数,为什么这段代码还能编译?

0 投票
3 回答
1423 浏览

c++ - 我应该明确地将 auto_ptr 初始化为零吗?

我的一些同事更喜欢在构造函数初始化列表中显式初始化std::auto_ptr0,但它会0在其构造函数中初始化为,而无需任何显式初始化。那么有什么理由这样做吗?

0 投票
5 回答
4744 浏览

c++ - 使用 std::auto_ptr 的感觉

是什么感觉auto_ptr?看看这段代码:

使用这个有什么意义auto_ptr

  • 它在超出范围时调用类析构函数作为普通类初始化变量(a)。
  • 我不能将此指针传递给具有类指针 (func) 的函数
  • 我不能使用指针auto_ptrfor A[]orchar[]因为 auto_ptr 调用 delete not delete[]

唯一的想法是我不必写delete,但是当我超出范围时它会被破坏,那么指针的意义是什么。我使用指针来控制变量的活动。

普通变量初始化在堆栈上,指针在堆上,但是告诉我使用auto_ptr而不是普通指针的意义是什么?

0 投票
2 回答
1968 浏览

c++ - 如何使用 std::auto_ptr 声明动态数组?

我正在尝试声明一个动态int数组,如下所示:

我可以这样做std::auto_ptr吗?

我试过类似的东西:

但它不编译。

我想知道我是否可以用auto_ptr构造声明一个动态数组以及如何声明。谢谢!

0 投票
3 回答
10566 浏览

c++ - C++中自动指针和共享指针有什么区别

我听说自动指针拥有它们的对象,而共享指针可以有许多指向它们的对象。为什么我们不一直使用共享指针。

关于什么是智能指针,人们将这个术语与共享指针互换使用。他们是一样的吗?

0 投票
5 回答
1342 浏览

c++ - std::move vs std::auto_ptr?

我可以用 C++11 中的“移动”(右值引用)做什么我不能用std::auto_ptr?(据我了解,它们是一个想法的不同实现。)

又是一个老问题:std::auto_ptr组件这么差吗?

0 投票
2 回答
3592 浏览

c++ - 将 auto_ptr转换为 auto_ptr

请帮助我理解以下问题。

看下面的代码示例:

为什么我不允许这样做:

编译器(MSVCPP 11):

0 投票
5 回答
2795 浏览

c++ - 'auto_ptr' 和 STL 容器:编写错误使用示例

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

在那里您可以找到以下声明:这种行为的一个微妙后果是auto_ptrs在所有情况下都不能正常工作。例如,将auto_ptr对象与标准模板库一起使用可能会导致问题,因为 STL 中的某些函数可能会复制容器中的对象,例如向量容器类。一个例子是 sort 函数,它复制正在排序的容器中的一些对象。这样一来,这个副本就可以爽快地删除容器中的数据了!

大多数关于 'auto_ptr' 的论文告诉我们如下内容:“切勿将 'auto_ptr' 与 STL 容器一起使用!他们经常在执行内部操作时复制其元素。例如考虑sorton std::vector”。

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

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

0 投票
4 回答
842 浏览

c++ - 如何允许临时的非常量复制构造函数

如何允许具有复制构造函数的类从临时对象中复制构造,该复制构造函数采用非常量引用?

背景是这样的:

我有一个函数应该返回一个指向所有从 Base 继承的对象的指针列表,所以我需要类似vector<Base*>. 鉴于这vector<auto_ptr>不是一个很好的选择,我想编写一个简单的包装器vector<Base*>来删除其析构函数中的所有元素。

我面临以下问题:

我的类有一个复制构造函数,如下所示:

这样我就可以将指针列表复制到新实例并在旧实例中清除它。

但显然,这不适用于返回值,因为临时对象不绑定到非常量引用。看到函数可以返回auto_ptr,它们是怎么实现的呢?

注意:我不能使用 C++11 或 boost,因此不能选择移动语义或 unique_ptr。

如果有帮助,这是我到目前为止的代码:

0 投票
1 回答
35 浏览

c++ - 为什么下例抛出异常时 pb 指向的 Shape 会被销毁?

这个例子取自 Stroustup 的书,第三版,第 14.4.2 节:

“这里的Rectangle,pb指向的Shape,pc指向的Circle,不管是否抛出异常,都被删除了。”