问题标签 [smart-pointers]

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 回答
2917 浏览

c++ - 从 std::set 中删除> 由 T*

我有一组共享指针:

和一个指针:

我想有效地set删除等于的元素p,但我不能对 set 的任何成员或任何标准算法执行此操作,因为T*它与boost::shared_ptr<T>.

我能想到的几种方法是:

  • 以某种方式从指针构造一个新的 shared_ptr ,该指针不会获得指向内存的所有权(理想的解决方案,但我看不到如何做到这一点)
  • 包装/重新实现 shared_ptr 以便我可以执行上述操作
  • 只是对集合进行我自己的二进制搜索
0 投票
1 回答
843 浏览

c++ - std::auto_ptr<>::operator = 重置/释放其现有指针?

我在这里读到关于 std::auto_ptr<>::operator=

但是请注意,当左侧对象已经指向某个对象时,它不会自动释放。您可以通过在为其分配新值之前调用成员函数 reset 来显式执行此操作。

但是,当我阅读头文件的源代码时C:\Program Files\Microsoft Visual Studio 8\VC\ce\include\memory

什么是正确/标准的行为?其他 STL 实现如何表现?如果上面引用的网站有错误/过时的信息,您推荐哪个网站作为参考?

0 投票
1 回答
308 浏览

c++ - 在 boost::python 中暴露 boost::scoped_ptr

我收到一个编译错误,说 的复制构造函数scoped_ptr是私有的,带有以下代码片段:

这个例子虽然适用于 shared_ptr 。如果有人知道答案,那就太好了。谢谢

0 投票
7 回答
1371 浏览

c++ - 智能指针 - 它们无法替换原始指针的情况

你好,

我有这个关于智能指针的查询。

我从我的一位朋友那里听说智能指针几乎总是可以替换原始指针。但是当我问他还有哪些智能指针不能代替原始指针的情况时,我没有从他那里得到答案。

谁能告诉我他们何时何地不能替换原始指针?

0 投票
4 回答
5029 浏览

c++ - 从列表中删除 boost::shared_ptr 的正确方法是什么?

我有一个std::listofboost::shared_ptr<T>并且我想从中删除一个项目,但我只有一个 T* 类型的指针,它与列表中的一个项目匹配。

但是我猜我不能使用myList.remove( tPtr ),因为 shared_ptr 没有实现==它的模板参数类型。

我的直接想法是尝试哪个在语法上是正确的,但由于临时有一个单独的 use_count myList.remove( shared_ptr<T>(tPtr) ),它会因双重删除而崩溃。shared_ptr

我看到的唯一选择是将 std::find 与自定义比较一起使用,或者循环遍历列表蛮力并自己找到它,但似乎应该有更好的方法。

我是否遗漏了一些明显的东西,或者这是否太不标准了,不能以清除干净/正常的方式使用?

0 投票
4 回答
1133 浏览

c++ - 多态队列

我正在尝试实现多态队列。这是我的试验:

不幸的是,由于我在第二条评论中提到的原因,我无法使用此代码制作多态队列。我想,我需要使用智能指针,但是如何?我对代码的任何改进或多态队列的新实现持开放态度。

谢谢。

0 投票
3 回答
4375 浏览

c++ - C++ 智能指针:共享指针与共享数据

在这篇富有洞察力的文章中,一位 Qt 程序员试图解释 Qt 实现的不同类型的智能指针。一开始,他区分了共享数据和共享指针本身:

首先,让我们弄清楚一件事:共享指针和共享数据是有区别的。当您共享指针时,指针的值及其生命周期受到智能指针类的保护。换句话说,指针是不变量。但是,指针指向的对象完全不受其控制。我们不知道对象是否可复制,是否可分配。

现在,数据共享涉及到智能指针类了解有关被共享数据的一些信息。事实上,关键在于数据是共享的,我们不在乎如何共享。在这一点上,指针被用来共享数据的事实是无关紧要的。例如,您并不真正关心 Qt 工具类是如何隐式共享的,是吗?对您而言重要的是它们是共享的(从而减少了内存消耗)并且它们就像不共享一样工作。

坦率地说,我只是不理解这个解释。文章评论中有一个澄清请求,但我发现作者的解释不够充分。

如果你明白这一点,请解释一下。这种区别是什么,其他共享指针类(即来自 boost 或新的 C++ 标准)如何适应这种分类法?

提前致谢

0 投票
3 回答
5871 浏览

c++ - 如何上下投射c ++智能指针

两个客户端在消息层之上相互通信

在消息正文中,我需要包含一个指向任何数据类型的字段

从客户端 A,我将字段作为 a 发送shared_ptr<TYPEA>到消息层。我将此字段定义为shared_ptr<void>消息层中的 a 。但是如何将此字段转换回shared_ptr<TYPEA>客户端 B 中?

或者我应该shared_ptr<void>在消息层中定义为别的东西吗?

谢谢

0 投票
3 回答
131 浏览

c++ - 指向 COM 对象的成员变量指针

保持成员变量指针对 COM 对象的引用并在 C++ 中的整个类中重用引用是否有任何问题。

是否有人知道每次您想要使用 COM 对象时您想要调用 .CreateInstance 的原因,即您每次都获得一个新实例。

我看不出你有什么理由要这样做,

谢谢,

(否是可以接受的答案!!!)

0 投票
4 回答
4283 浏览

c++ - 智能指针和多态

我实现了引用计数指针(SP在示例中调用)并且我遇到了我认为我不应该有的多态性问题。

在以下代码中:

DerivedClass继承自BaseClass。使用普通指针,这应该可以工作,但是使用它所说的智能指针"cannot convert from 'SP<T>' to 'const SP<T>&",我认为它指的是智能指针的复制构造函数。

如何使用引用计数指针允许这种多态性?如果我遇到这个问题,我会很感激代码示例,因为显然我在这里做错了。

PS:请不要告诉我使用带有智能指针的标准库,因为目前这是不可能的。