问题标签 [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 投票
2 回答
1985 浏览

c++ - 参考资料和 auto_ptr

如果我有一个 auto_ptr,我可以通过它作为参考吗?比如:

auto_ptrs 的奇数复制行为是什么?

0 投票
2 回答
1063 浏览

c++ - boost::ptr_vector 和 boost::any 的问题

好的,所以我有疑问,我想知道这是否可能:

我正在使用带有通用数据(字符串、整数、布尔值等)的数据库。每当构造对象或修改对象的成员时,我都必须使用特定操作(SELECT 或 UPDATE)查询数据库。首先,这不是与数据库相关的问题,我真正的问题是我有一个 ptr_vector,它保存 boost::any 指向对象成员的指针。在这样的代码中:

然后我将要修改的成员传递给另一个杂项类的函数,该函数以 boost::any* 为参数:

同一个类接受 any*,并执行以下操作:

Enemy_Values 是一个 ptr_vector。因此,当我访问这个具有 Enemy_Values 作为成员的 misc_class 时,我想更改内部的 auto_ptr 指向的值:

在这里,我得到一个违规错误。我尝试了很多事情,有人告诉我,我不应该使用 auto_ptr 容器或使用 boost::any 来回转换。这是我正在做的可能,还是有更好更直观的方法?

提前致谢。

0 投票
5 回答
262 浏览

c++ - 返回一个新对象和另一个值

我想返回两个值,其中一个是一个新对象。我可以这样做std::pair

为了使代码异常安全,我想做:

但这不会编译,因为如果auto_ptr不修改auto_ptr被复制的内容就无法复制。好的,这意味着auto_ptr不像其他类型那样组合得很好(以另一种方式)。在这种情况下返回新对象的好方法是什么?

一种选择是返回 a shared_ptr,另一种是 inout 引用。但我正在寻找其他选择。我可以做类似的事情:

有没有更好的办法?

0 投票
9 回答
7286 浏览

c++ - 如何在必须复制构造的类中使用 std::auto_ptr?

我有foo一个包含我想复制构造的 std::auto_ptr 成员的类,但这似乎是不允许的。作业也有类似的情况。请参见以下示例:

我可以声明_c为,mutable但我不确定这是正确的。有没有人有更好的解决方案?

编辑

好的,我没有得到我期望的那种答案,所以我会更具体地说明这个问题。

  • 类型的对象foo在堆栈上创建并按值传递给容器类(不是 stl),然后超出范围。我无法控制容器代码。(它实际上是一个活动队列实现,有错误。)
  • 该类bar是一个相当重量级的解析器。它的性能非常差newdelete因此即使它是可复制的,也太昂贵了。
  • 我们可以保证,当一个bar对象被创建时,它一次只需要在一个地方拥有。在这种情况下,它在线程之间传递并在事务完成时被删除。这就是为什么我希望使用std::autp_ptr.
  • 我非常愿意考虑提升智能指针,但如果有替代方案,我希望能保证这种唯一性。
0 投票
7 回答
857 浏览

c++ - 为什么这段代码只打印 42?

有人可以向我解释为什么这段代码只打印“42”而不是“created\n42”吗?

顺便说一句,我在解决方案中用不同的值尝试了这段代码,我总是得到“正确”的值,所以它似乎不是一个随机的幸运值。

0 投票
2 回答
3520 浏览

c++ - std::auto_ptr、delete[] 和泄漏

为什么这段代码不会导致内存泄漏?

WinXP sp2,编译器:BCB.05.03

0 投票
2 回答
685 浏览

c++ - 从函数返回多个 auto_ptrs

我有一个在堆上分配两个变量并将它们返回给调用者的函数。像这样的东西:

通常,在类似的情况下,当我有一个带有一个变量的函数时,我会使用“源”技巧auto_ptr

我想改写Create1usingauto_ptr但不知道该怎么做。据我了解,我不能通过引用返回 auto_ptr,对吗?那么有可能吗?

0 投票
3 回答
17950 浏览

c++ - 你什么时候会使用 std::auto_ptr 而不是 boost::shared_ptr?

我们几乎已经boost::shared_ptr在所有代码中都使用了,但是我们仍然有一些孤立的情况使用std::auto_ptr,包括单例类:

有人告诉我有一个很好的理由为什么没有这样做shared_ptr,但对于我的生活,我无法理解为什么?我知道这auto_ptr最终会在下一个标准中被标记为折旧,所以我想知道我可以用什么/如何替换这个实现

另外,还有什么其他原因可以让您考虑使用 anauto_ptr而不是 ashared_ptr吗?您是否看到将来迁移到 shared_ptr 有任何问题?


编辑:

  1. 因此,在回答“我可以在上面的代码中安全地替换auto_ptrshared_ptr”时,答案是肯定的 - 但是我会受到一点性能影响。
  2. auto_ptr最终被标记为折旧并且我们转移到时std::shared_ptr,我们需要彻底测试我们的代码以确保我们遵守不同的所有权语义。
0 投票
2 回答
1219 浏览

c++ - 如何使用 auto_ptr 作为处理另一个成员变量的成员变量

我有这样的课:

但是 B ptr 在不同的 A 对象之间共享。如何使用 auto_ptr 以便在 A 被破坏时 B 保持打开状态,以便指向同一 ptr 的其他 A 对象可以继续运行而不会出现问题。这看起来好吗:

人们实现这一点的不同方式以及他们看到的任何问题/优势是什么......谢谢

0 投票
4 回答
926 浏览

c++ - 如何有效地删除存储在多个容器中的 C++ 对象?自动指针?

我有一个应用程序,它在执行期间创建某种类型的对象(例如,“Foo”类),以跟踪一些统计信息,并将它们插入两个 STL 映射中的一个或两个中,例如:

我想知道删除 Foo 对象的最佳方法是什么。目前我的解决方案是遍历 map1 和 map2,并将 Foo 指针放入一个集合中,然后在这个集合上进行交互并在每个集合上调用 delete。

有没有更有效的方法,可能使用 auto_ptr?如果是这样,由于 auto_ptr<> 对象不能存储在 STL 容器中,如何?

提前致谢。