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

c++ - 提供与 auto_ptr 一起使用的“安全”push() 函数

我想声明一个“安全”push()函数,以便auto_ptr像这样使用:

我也希望它适用于空指针,例如:

因此,专业化:

虽然它有效,但它既丑陋又允许错误代码,例如:

编译。

我怎样才能写出一个push()只接受0作为有效值int(对于空指针)的特化?

要求

  • StackType是一些我必须使用的类似堆栈的容器类,并且我无法更改其源代码(就像std::stack)。我可以假设它有一个push()成员函数。

  • 我不能使用nullptr,因为我不需要 C++0x 编译器。

0 投票
6 回答
643 浏览

c++ - 这个 auto_ptr 程序是如何工作的以及它的作用是什么?

我运行了这个程序,但我没有得到这个 auto_ptr 的作用以及它在哪些基础上显示值?

0 投票
1 回答
1787 浏览

c++ - 使用 typedef 函数指针的不完整类型

我有一个抽象基类,它定义了数据接收器的接口。数据接收器的具体实现是通过工厂获得的。为了整理代码,我为工厂方法创建了一个 typedef,它从 DataSink 抽象基类中返回新的 DataSink 对象。

如果我随后尝试在某处声明:
boost::function<get_new_data_sink_function_type> getNewDataSinkFunction_;
某处,我得到:
error: field 'getNewDataSinkFunction_' has incomplete type
如果我改为声明:
boost::function<std::auto_ptr<DataSink>(std::string)> getNewDataSinkFunction_;
...一切都很好。

我意识到 DataSink 是一个不完整的类型,因为它是抽象的,但是因为由于 std::auto_ptr 我正在使用引用语义,所以应该没问题,对吧?无论如何,这并不能解释为什么 typedef 失败并且 typedef 定义的剪切和粘贴成功。这是 boost::function 的怪癖吗?

编译器是 gcc 4.3.3。任何见解都非常感谢。

0 投票
4 回答
7318 浏览

c++ - 将 auto_ptr<> 与数组一起使用

我正在使用auto_ptr<>它使用类指针类型的数组,所以我如何为其赋值。

例如 auto_ptr<class*> arr[10];

如何为arr数组赋值?

0 投票
2 回答
240 浏览

c++ - 在没有 boost 和 c++0x 的情况下安全地进行类型擦除

假设我有一个模板类

现在,如果我想将 A 的每个可能实例存储在同一个容器中,比如说一个向量。

然后经典(也是我知道的唯一方法)是使用纯虚拟 print() 成员函数创建另一个类 A_base,并将指向 A_base 的指针存储为初始化为 A 的实例。使用 new 执行此操作可能会引发内存泄漏和/或异常不安全,因此解决此问题的合理方法是使用 boost::shared_ptr 或 std::tr1::shared_ptr,因为复制 std::auto_ptr 可能会导致所有权问题和未定义行为!

有什么方法可以在不包括 boost 或 c++0x 依赖项的情况下进行类型擦除?:)

谢谢 !

0 投票
5 回答
316 浏览

c++ - C++ 是否使用 auto_ptr 引用作为输出变量惯用?

假设我想编写工厂方法,该方法应该在堆上分配异构对象并将它们返回给调用者。我正在考虑设计这样的API:

这允许调用者这样做:

我的问题是:“这是惯用的吗?如果不是,那么正确的方法是什么?”

我能想到的替代方法包括返回 a structof auto_ptrs,或编写工厂 API 以获取原始指针引用。它们都需要编写更多代码,而后者在异常安全方面还有其他问题。

0 投票
3 回答
234 浏览

c++ - 使用哪种(自动)指针?

我遇到了几个问题,其中的答案表明使用 T* 从来都不是最好的主意。

虽然我已经大量使用了 RIIC,但在我的代码中有一个特殊点,我使用了 T*。阅读了几个自动指针,我找不到一个我会说我使用它有明显优势的地方。

我的场景:

MyMapper现在有一个HashMap<...>*成员,根据对无关问题的高度投票回答,这绝不是一个好主意(尽管映射器会在实例之前超出范围MyClass,因此我不认为这是一个太大的问题。new映射器中没有,也不需要delete)。

那么在这个特定用例中最好的选择是什么?

0 投票
3 回答
4125 浏览

c++ - 将 auto_ptr 传递给函数有效地使其成为接收器。为什么?

我正在阅读一些关于共享指针的注释。他们说 STL 首次尝试使用 auto_ptr 有以下主要缺点:

  • 它们不能在 STL 容器中使用
  • 复制 auto_ptr 转移所有权
  • 将 auto_ptr 传递给函数有效地使其成为接收器

我理解前两个,但不确定最后一个是什么意思。

有人可以解释一下吗。

谢谢。

0 投票
5 回答
18555 浏览

c++ - 如何测试自动指针是否为空?

我是自动指针的新手。我有这个:

如何测试我是否可以myPointer成功实例化?我试过if (myPointer==NULL)了,编译器发出了一个错误:

没有运算符 "==" 匹配这些操作数。

0 投票
2 回答
397 浏览

c++ - 标准::auto_ptr用法

我在体面的教科书中阅读了相当多的关于 auto_ptr 类的内容。虽然我了解它是什么,以及它如何帮助您解决在构造函数等地方获取异常的问题,但我无法弄清楚何时有人会真正使用它。

auto_ptr 只能保存一个类型(不支持数组 new[] 初始化)。当您将其传递给函数或尝试复制它时,它会更改所有权(它不是引用计数智能指针)。

这个类的实际使用场景是什么?似乎大多数使用它的教科书示例都达到了,因为在大多数情况下甚至没有理由在堆栈变量上使用指针......

无论如何,我会停止我的咆哮——但如果你能为此提供一个简短的示例/描述或一个好的使用场景的链接,我将不胜感激。我只是想知道在实践中应该在哪里使用它,以防遇到这种情况 - 我喜欢练习我学到的东西,所以我记得它。