问题标签 [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.
c++ - 从 std::set 中删除> 由 T*
我有一组共享指针:
和一个指针:
我想有效地set
删除等于的元素p
,但我不能对 set 的任何成员或任何标准算法执行此操作,因为T*
它与boost::shared_ptr<T>
.
我能想到的几种方法是:
- 以某种方式从指针构造一个新的 shared_ptr ,该指针不会获得指向内存的所有权(理想的解决方案,但我看不到如何做到这一点)
- 包装/重新实现 shared_ptr 以便我可以执行上述操作
- 只是对集合进行我自己的二进制搜索
c++ - std::auto_ptr<>::operator = 重置/释放其现有指针?
我在这里读到关于 std::auto_ptr<>::operator=
但是请注意,当左侧对象已经指向某个对象时,它不会自动释放。您可以通过在为其分配新值之前调用成员函数 reset 来显式执行此操作。
但是,当我阅读头文件的源代码时C:\Program Files\Microsoft Visual Studio 8\VC\ce\include\memory
什么是正确/标准的行为?其他 STL 实现如何表现?如果上面引用的网站有错误/过时的信息,您推荐哪个网站作为参考?
c++ - 在 boost::python 中暴露 boost::scoped_ptr
我收到一个编译错误,说 的复制构造函数scoped_ptr
是私有的,带有以下代码片段:
这个例子虽然适用于 shared_ptr 。如果有人知道答案,那就太好了。谢谢
c++ - 智能指针 - 它们无法替换原始指针的情况
你好,
我有这个关于智能指针的查询。
我从我的一位朋友那里听说智能指针几乎总是可以替换原始指针。但是当我问他还有哪些智能指针不能代替原始指针的情况时,我没有从他那里得到答案。
谁能告诉我他们何时何地不能替换原始指针?
c++ - 从列表中删除 boost::shared_ptr 的正确方法是什么?
我有一个std::list
ofboost::shared_ptr<T>
并且我想从中删除一个项目,但我只有一个 T* 类型的指针,它与列表中的一个项目匹配。
但是我猜我不能使用myList.remove( tPtr )
,因为 shared_ptr 没有实现==
它的模板参数类型。
我的直接想法是尝试哪个在语法上是正确的,但由于临时有一个单独的 use_count myList.remove( shared_ptr<T>(tPtr) )
,它会因双重删除而崩溃。shared_ptr
我看到的唯一选择是将 std::find 与自定义比较一起使用,或者循环遍历列表蛮力并自己找到它,但似乎应该有更好的方法。
我是否遗漏了一些明显的东西,或者这是否太不标准了,不能以清除干净/正常的方式使用?
c++ - 多态队列
我正在尝试实现多态队列。这是我的试验:
不幸的是,由于我在第二条评论中提到的原因,我无法使用此代码制作多态队列。我想,我需要使用智能指针,但是如何?我对代码的任何改进或多态队列的新实现持开放态度。
谢谢。
c++ - C++ 智能指针:共享指针与共享数据
在这篇富有洞察力的文章中,一位 Qt 程序员试图解释 Qt 实现的不同类型的智能指针。一开始,他区分了共享数据和共享指针本身:
首先,让我们弄清楚一件事:共享指针和共享数据是有区别的。当您共享指针时,指针的值及其生命周期受到智能指针类的保护。换句话说,指针是不变量。但是,指针指向的对象完全不受其控制。我们不知道对象是否可复制,是否可分配。
现在,数据共享涉及到智能指针类了解有关被共享数据的一些信息。事实上,关键在于数据是共享的,我们不在乎如何共享。在这一点上,指针被用来共享数据的事实是无关紧要的。例如,您并不真正关心 Qt 工具类是如何隐式共享的,是吗?对您而言重要的是它们是共享的(从而减少了内存消耗)并且它们就像不共享一样工作。
坦率地说,我只是不理解这个解释。文章评论中有一个澄清请求,但我发现作者的解释不够充分。
如果你明白这一点,请解释一下。这种区别是什么,其他共享指针类(即来自 boost 或新的 C++ 标准)如何适应这种分类法?
提前致谢
c++ - 如何上下投射c ++智能指针
两个客户端在消息层之上相互通信
在消息正文中,我需要包含一个指向任何数据类型的字段
从客户端 A,我将字段作为 a 发送shared_ptr<TYPEA>
到消息层。我将此字段定义为shared_ptr<void>
消息层中的 a 。但是如何将此字段转换回shared_ptr<TYPEA>
客户端 B 中?
或者我应该shared_ptr<void>
在消息层中定义为别的东西吗?
谢谢
c++ - 指向 COM 对象的成员变量指针
保持成员变量指针对 COM 对象的引用并在 C++ 中的整个类中重用引用是否有任何问题。
是否有人知道每次您想要使用 COM 对象时您想要调用 .CreateInstance 的原因,即您每次都获得一个新实例。
我看不出你有什么理由要这样做,
谢谢,
(否是可以接受的答案!!!)
c++ - 智能指针和多态
我实现了引用计数指针(SP
在示例中调用)并且我遇到了我认为我不应该有的多态性问题。
在以下代码中:
DerivedClass
继承自BaseClass
。使用普通指针,这应该可以工作,但是使用它所说的智能指针"cannot convert from 'SP<T>' to 'const SP<T>&"
,我认为它指的是智能指针的复制构造函数。
如何使用引用计数指针允许这种多态性?如果我遇到这个问题,我会很感激代码示例,因为显然我在这里做错了。
PS:请不要告诉我使用带有智能指针的标准库,因为目前这是不可能的。