问题标签 [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++ - 指针和智能指针的区别
你能告诉我这段代码有什么问题吗?我在面试中被问到这个问题,我不确定它有什么问题
tClass 是一个测试类,其方法 printSomething 打印 tClass 的成员。
或者这是一个技巧问题。
c++ - auto_ptr 与 swig
我正在尝试包装一个使用 auto_ptr 的 C++ 库。我正在使用 swig 并想生成 python 绑定。我在这里看到了 swig 文档中关于如何使用 swig 和智能指针的部分。但我无法让它工作。
Swig 生成想要使用 const 引用初始化 auto_ptr 的代码,但 auto_ptr 使用非常量引用定义了复制构造函数,例如 auto_ptr(auto_ptr &)。生成的代码不能使用“丢弃 const 限定符”进行编译。当我手动删除 const 限定符时,代码编译得很好。
我看过很多邮件列表条目,但没有任何帮助。有人可以为我提供一个工作示例。我的非工作样本在这里:
我使用带有以下 CMakeLists.txt 的 cmake 编译它:
c++ - C++ std::auto_ptr 复制构造函数
std::auto_ptr 缺少 const 复制构造函数,因此我不能直接在集合中使用它。有没有办法在不使用提升指针集合模板的情况下获得例如 std::auto_ptr 的向量?
c++ - 使用 std::auto_ptr 数据成员会调用 UB 吗?
作为包含存储在 vector 中的 auto_ptr 的 Class的后续,我相信未说明的结论是可以使用具有auto_ptr
成员的类作为容器元素,只要复制构造和复制分配都是用户定义的(以免调用auto_ptr
s 复制构造函数和复制赋值)。这有什么违反标准库要求的吗?
请告诉我以下内容是否有问题,因为我想开始习惯性地这样做:
请注意,我意识到的一件事是,使用这种方法,Y
' 类定义必须在X
' 定义的范围内(而不是在使用“原始”指针时向前声明Y
)。这是因为当auto_ptr
被实例化时,它的析构函数必须在 a 上调用 delete Y
,因此Y
不能是不完整的类型。我想在类X
管理多个资源(有多个auto_ptr
成员)的情况下,这必须与 RAII 的值进行权衡。对此有什么想法吗?
我认为这项技术总体上很棒,可以消除可能必须构造/破坏/复制潜在多个资源(单一责任主体)的类的许多棘手代码。我只是想知道是否auto_ptr
可以达到目的,或者由于某些微妙的语言/标准库要求而在这里不起作用。
请注意,我知道其他类型的智能指针,但我正在实现一个库接口,我不想对我的客户强加任何对 Boost 或 TR1 的要求。任何关于一般使用的讲座auto_ptr
都将被否决!
c++ - 引用容器对象的子集
我有一个关于引用集合子集的快速问题。考虑我有一个对象向量。现在我想创建另一个向量,它是该向量的子集,并且我不想创建对象子集的副本。
我正在考虑的一种方法是创建一个vector<auto_ptr<MyClass> >
. 这是一个好方法吗?如果您认为任何其他容器或习语或模式在这种情况下会有所帮助,请提出建议。谢谢
c++ - 如何实现 std::auto_ptr 的复制构造函数?
回到我疯狂的AutoArray thingy ...(从那里引用重要的部分:
)
无论如何,尝试实现复制构造函数。有一段客户端代码(尚未提交到 bitbucket,因为它不会构建)如下所示:
这失败了,因为复制构造函数将非const
引用作为参数....但是我看不出如何修改复制构造函数以获取const
引用,因为AutoArray
分配中使用的源已被修改(因此不会不是const
)。当然,您不能修改内容以使用按值传递,因为它是复制构造函数,那将是一个无限循环!
如果我使用auto_ptr
,这将是有效的:
那么,具有auto_ptr
' 的复制语义的类如何成为可能呢?
c++ - 在 C++03 中返回类似`std::auto_ptr`s 集合的最佳方法是什么?
std::auto_ptr
不允许存储在 STL 容器中,例如std::vector
. 但是,有时我需要返回多态对象的集合,因此我无法返回对象向量(由于切片问题)。我可以使用std::tr1::shared_ptr
并将vector
它们粘贴在 .它不考虑所有权。
C++0x 以 的形式为这个问题提供了完美的解决方案std::vector<std::unique_ptr<t>>
,但我无法访问 C++0x。
其他一些注意事项:
- 我无权访问 C++0x,但我有 TR1 可用。
- 我想避免使用 Boost (尽管如果没有其他选项可以使用)
- 我知道
boost::ptr_container
容器(即boost::ptr_vector
),但我想避免这种情况,因为它会破坏调试器(内部存储在void *
s 中,这意味着很难在调试器中查看实际存储在容器内的对象)
c++ - 有什么理由使用 auto_ptr 吗?
在阅读了 Jossutis 从他的 STL 书中对 auto_ptr 的解释后,我有一个强烈的印象,即无论我尝试在什么任务中使用它,我都会 100% 失败,因为 auto_ptr 的许多陷阱之一。
我的问题是:是否有任何现实生活中的任务 auto_ptr 非常有用并且非常适合那里?
c++ - C++ -- 这里是否有从 Fred* 到 auto_ptr 的隐式转换?
我看到了下面的代码,
请参阅函数创建中列出的问题。
谢谢
// 根据评论更新
是的,代码无法传递 VC8.0 错误 C2664: 'std::auto_ptr<_Ty>::auto_ptr(std::auto_ptr<_Ty> &) throw()' : cannot convert parameter 1 from 'Fred *' to ' std::auto_ptr<_Ty> &'
代码复制自 C++ FAQ 12.15。
但是,在进行以下更改后,
这段代码可以通过VC8.0编译。但我不确定这是否是一个正确的修复。