问题标签 [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++ - 提供与 auto_ptr 一起使用的“安全”push() 函数
我想声明一个“安全”push()
函数,以便auto_ptr
像这样使用:
我也希望它适用于空指针,例如:
因此,专业化:
虽然它有效,但它既丑陋又允许错误代码,例如:
编译。
我怎样才能写出一个push()
只接受0
作为有效值int
(对于空指针)的特化?
要求
StackType
是一些我必须使用的类似堆栈的容器类,并且我无法更改其源代码(就像std::stack
)。我可以假设它有一个push()
成员函数。我不能使用
nullptr
,因为我不需要 C++0x 编译器。
c++ - 这个 auto_ptr 程序是如何工作的以及它的作用是什么?
我运行了这个程序,但我没有得到这个 auto_ptr 的作用以及它在哪些基础上显示值?
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。任何见解都非常感谢。
c++ - 将 auto_ptr<> 与数组一起使用
我正在使用auto_ptr<>
它使用类指针类型的数组,所以我如何为其赋值。
例如
auto_ptr<class*> arr[10];
如何为arr
数组赋值?
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 依赖项的情况下进行类型擦除?:)
谢谢 !
c++ - C++ 是否使用 auto_ptr 引用作为输出变量惯用?
假设我想编写工厂方法,该方法应该在堆上分配异构对象并将它们返回给调用者。我正在考虑设计这样的API:
这允许调用者这样做:
我的问题是:“这是惯用的吗?如果不是,那么正确的方法是什么?”
我能想到的替代方法包括返回 a struct
of auto_ptr
s,或编写工厂 API 以获取原始指针引用。它们都需要编写更多代码,而后者在异常安全方面还有其他问题。
c++ - 使用哪种(自动)指针?
我遇到了几个问题,其中的答案表明使用 T* 从来都不是最好的主意。
虽然我已经大量使用了 RIIC,但在我的代码中有一个特殊点,我使用了 T*。阅读了几个自动指针,我找不到一个我会说我使用它有明显优势的地方。
我的场景:
MyMapper
现在有一个HashMap<...>*
成员,根据对无关问题的高度投票回答,这绝不是一个好主意(尽管映射器会在实例之前超出范围MyClass
,因此我不认为这是一个太大的问题。new
映射器中没有,也不需要delete
)。
那么在这个特定用例中最好的选择是什么?
c++ - 将 auto_ptr 传递给函数有效地使其成为接收器。为什么?
我正在阅读一些关于共享指针的注释。他们说 STL 首次尝试使用 auto_ptr 有以下主要缺点:
- 它们不能在 STL 容器中使用
- 复制 auto_ptr 转移所有权
- 将 auto_ptr 传递给函数有效地使其成为接收器
我理解前两个,但不确定最后一个是什么意思。
有人可以解释一下吗。
谢谢。
c++ - 如何测试自动指针是否为空?
我是自动指针的新手。我有这个:
如何测试我是否可以myPointer
成功实例化?我试过if (myPointer==NULL)
了,编译器发出了一个错误:
没有运算符 "==" 匹配这些操作数。
c++ - 标准::auto_ptr用法
我在体面的教科书中阅读了相当多的关于 auto_ptr 类的内容。虽然我了解它是什么,以及它如何帮助您解决在构造函数等地方获取异常的问题,但我无法弄清楚何时有人会真正使用它。
auto_ptr 只能保存一个类型(不支持数组 new[] 初始化)。当您将其传递给函数或尝试复制它时,它会更改所有权(它不是引用计数智能指针)。
这个类的实际使用场景是什么?似乎大多数使用它的教科书示例都达到了,因为在大多数情况下甚至没有理由在堆栈变量上使用指针......
无论如何,我会停止我的咆哮——但如果你能为此提供一个简短的示例/描述或一个好的使用场景的链接,我将不胜感激。我只是想知道在实践中应该在哪里使用它,以防遇到这种情况 - 我喜欢练习我学到的东西,所以我记得它。