问题标签 [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.
c++ - 为什么 vector.push_back(auto_ptr) 不会编译?
我了解到 STL 可以禁止程序员将 auto_ptr 放入容器中。例如以下代码将无法编译:
auto_ptr 有拷贝构造函数,为什么这段代码还能编译?
c++ - 我应该明确地将 auto_ptr 初始化为零吗?
我的一些同事更喜欢在构造函数初始化列表中显式初始化std::auto_ptr
为0
,但它会0
在其构造函数中初始化为,而无需任何显式初始化。那么有什么理由这样做吗?
c++ - 使用 std::auto_ptr 的感觉
是什么感觉auto_ptr
?看看这段代码:
使用这个有什么意义auto_ptr
?
- 它在超出范围时调用类析构函数作为普通类初始化变量(a)。
- 我不能将此指针传递给具有类指针 (func) 的函数
- 我不能使用指针
auto_ptr
forA[]
orchar[]
因为 auto_ptr 调用 delete notdelete[]
。
唯一的想法是我不必写delete,但是当我超出范围时它会被破坏,那么指针的意义是什么。我使用指针来控制变量的活动。
普通变量初始化在堆栈上,指针在堆上,但是告诉我使用auto_ptr
而不是普通指针的意义是什么?
c++ - 如何使用 std::auto_ptr 声明动态数组?
我正在尝试声明一个动态int
数组,如下所示:
我可以这样做std::auto_ptr
吗?
我试过类似的东西:
但它不编译。
我想知道我是否可以用auto_ptr
构造声明一个动态数组以及如何声明。谢谢!
c++ - C++中自动指针和共享指针有什么区别
我听说自动指针拥有它们的对象,而共享指针可以有许多指向它们的对象。为什么我们不一直使用共享指针。
关于什么是智能指针,人们将这个术语与共享指针互换使用。他们是一样的吗?
c++ - std::move vs std::auto_ptr?
我可以用 C++11 中的“移动”(右值引用)做什么我不能用std::auto_ptr
?(据我了解,它们是一个想法的不同实现。)
又是一个老问题:std::auto_ptr
组件这么差吗?
c++ - 将 auto_ptr 转换为 auto_ptr
请帮助我理解以下问题。
看下面的代码示例:
为什么我不允许这样做:
编译器(MSVCPP 11):
c++ - 'auto_ptr' 和 STL 容器:编写错误使用示例
阅读本教程后提出的这个问题: http ://www.cprogramming.com/tutorial/auto_ptr.html
在那里您可以找到以下声明:这种行为的一个微妙后果是auto_ptrs在所有情况下都不能正常工作。例如,将auto_ptr对象与标准模板库一起使用可能会导致问题,因为 STL 中的某些函数可能会复制容器中的对象,例如向量容器类。一个例子是 sort 函数,它复制正在排序的容器中的一些对象。这样一来,这个副本就可以爽快地删除容器中的数据了!
大多数关于 'auto_ptr' 的论文告诉我们如下内容:“切勿将 'auto_ptr' 与 STL 容器一起使用!他们经常在执行内部操作时复制其元素。例如考虑sort
on std::vector
”。
所以我的目标是编写代码示例来说明这一点,或者证明这些示例仅在理论上是正确的,而在实践中却很奇怪。
PS @everybody_who_also_knows_that_auto_ptr_is_deprecated 我也知道这一点。但是您不考虑可能不允许使用新指针容器的技术原因(遗留代码或旧编译器)吗?而且这个问题是关于旧的和坏的(如果你愿意的话)auto_ptr
。
c++ - 如何允许临时的非常量复制构造函数
如何允许具有复制构造函数的类从临时对象中复制构造,该复制构造函数采用非常量引用?
背景是这样的:
我有一个函数应该返回一个指向所有从 Base 继承的对象的指针列表,所以我需要类似vector<Base*>
. 鉴于这vector<auto_ptr>
不是一个很好的选择,我想编写一个简单的包装器vector<Base*>
来删除其析构函数中的所有元素。
我面临以下问题:
我的类有一个复制构造函数,如下所示:
这样我就可以将指针列表复制到新实例并在旧实例中清除它。
但显然,这不适用于返回值,因为临时对象不绑定到非常量引用。看到函数可以返回auto_ptr,它们是怎么实现的呢?
注意:我不能使用 C++11 或 boost,因此不能选择移动语义或 unique_ptr。
如果有帮助,这是我到目前为止的代码:
c++ - 为什么下例抛出异常时 pb 指向的 Shape 会被销毁?
这个例子取自 Stroustup 的书,第三版,第 14.4.2 节:
“这里的Rectangle,pb指向的Shape,pc指向的Circle,不管是否抛出异常,都被删除了。”