问题标签 [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 回答
1290 浏览

c++ - 指针和智能指针的区别

你能告诉我这段代码有什么问题吗?我在面试中被问到这个问题,我不确定它有什么问题

tClass 是一个测试类,其方法 printSomething 打印 tClass 的成员。

或者这是一个技巧问题。

0 投票
2 回答
853 浏览

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 编译它:

0 投票
3 回答
4006 浏览

c++ - C++ std::auto_ptr 复制构造函数

std::auto_ptr 缺少 const 复制构造函数,因此我不能直接在集合中使用它。有没有办法在不使用提升指针集合模板的情况下获得例如 std::auto_ptr 的向量?

0 投票
3 回答
288 浏览

c++ - 使用 std::auto_ptr 数据成员会调用 UB 吗?

作为包含存储在 vector 中的 auto_ptr 的 Class的后续,我相信未说明的结论是可以使用具有auto_ptr成员的类作为容器元素,只要复制构造和复制分配都是用户定义的(以免调用auto_ptrs 复制构造函数和复制赋值)。这有什么违反标准库要求的吗?

请告诉我以下内容是否有问题,因为我想开始习惯性地这样做:

请注意,我意识到的一件事是,使用这种方法,Y' 类定义必须在X' 定义的范围内(而不是在使用“原始”指针时向前声明Y)。这是因为当auto_ptr被实例化时,它的析构函数必须在 a 上调​​用 delete Y,因此Y不能是不完整的类型。我想在类X管理多个资源(有多个auto_ptr成员)的情况下,这必须与 RAII 的值进行权衡。对此有什么想法吗?

我认为这项技术总体上很棒,可以消除可能必须构造/破坏/复制潜在多个资源(单一责任主体)的类的许多棘手代码。我只是想知道是否auto_ptr可以达到目的,或者由于某些微妙的语言/标准库要求而在这里不起作用。

请注意,我知道其他类型的智能指针,但我正在实现一个库接口,我不想对我的客户强加任何对 Boost 或 TR1 的要求。任何关于一般使用的讲座auto_ptr都将被否决!

0 投票
4 回答
1197 浏览

c++ - 引用容器对象的子集

我有一个关于引用集合子集的快速问题。考虑我有一个对象向量。现在我想创建另一个向量,它是该向量的子集,并且我不想创建对象子集的副本。

我正在考虑的一种方法是创建一个vector<auto_ptr<MyClass> >. 这是一个好方法吗?如果您认为任何其他容器或习语或模式在这种情况下会有所帮助,请提出建议。谢谢

0 投票
3 回答
3022 浏览

c++ - 如何实现 std::auto_ptr 的复制构造函数?

回到我疯狂的AutoArray thingy ...(从那里引用重要的部分:

)

无论如何,尝试实现复制构造函数。有一段客户端代码(尚未提交到 bitbucket,因为它不会构建)如下所示:

这失败了,因为复制构造函数将非const引用作为参数....但是我看不出如何修改复制构造函数以获取const引用,因为AutoArray分配中使用的源已被修改(因此不会不是const)。当然,您不能修改内容以使用按值传递,因为它是复制构造函数,那将是一个无限循环!

如果我使用auto_ptr,这将是有效的:

那么,具有auto_ptr' 的复制语义的类如何成为可能呢?

0 投票
1 回答
179 浏览

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 中,这意味着很难在调试器中查看实际存储在容器内的对象)
0 投票
4 回答
3899 浏览

c++ - 有什么理由使用 auto_ptr 吗?

在阅读了 Jossutis 从他的 STL 书中对 auto_ptr 的解释后,我有一个强烈的印象,即无论我尝试在什么任务中使用它,我都会 100% 失败,因为 auto_ptr 的许多陷阱之一。

我的问题是:是否有任何现实生活中的任务 auto_ptr 非常有用并且非常适合那里?

0 投票
3 回答
738 浏览

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编译。但我不确定这是否是一个正确的修复。

0 投票
5 回答
19617 浏览

c++ - 容器中的智能指针,如 std::vector?

我正在学习智能指针 ( std::auto_ptr),只是在这里这里阅读智能指针 ( std::auto_ptr) 不应放入容器 (ie std::vector),因为即使大多数编译器也不会抱怨,而且它可能看起来是正确的。没有规则说智能指针不会在内部(vector例如按类)复制并转移其所有权,然后指针将变为 NULL。到头来,一切都会搞砸。

实际上,这种情况多久发生一次?

有时我有指针向量,如果将来我决定想要一个智能指针向量,我的选择是什么?

我知道 C++0x 和 Boost 库,但现在,我更愿意坚持使用 STL 方法。