问题标签 [boost-ptr-container]
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++ - 在“发布”时提升 ptr_container 泄漏?
我假设ptr_set
如果未手动删除从 a 释放的对象,则会泄漏该对象。但是,下面的测试程序仅显示 valgrind 中有 2 个泄漏(从第 9/13 行开始),第 12 行没有泄漏。我误解了release
,还是ptr_container
设法以某种方式进行清理?
输出:
c++ - stl 容器与 std::unique_ptr's vs boost::ptr_container
有了 c++11,我问自己是否可以替换 c++11 中的 boost::ptr_containers。我知道我可以使用例如 a std::vector<std::unique_ptr<T> >
,但我不确定这是否是一个完整的替代品。处理这些情况的推荐方法是什么?
c++ - boost::ptr_list 中的前向声明类
对于一个小型科学项目,我设置了一个模拟类,它将所有模拟对象保存在 ptr_list 中。因为我需要快速访问所有粒子,所以我添加了一个额外的 ptr_list。现在 boost 抱怨,因为它不喜欢前向声明的类。recursive_wrapper
已经向我指出,但ptr_list< recursive_wrapper<Particle> >
似乎都不起作用。
c++ - boost::ptr_map<> 和 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 断言失败
关于stackoverflow的第一个问题,希望能在这个问题上得到一些帮助。如果您查看以下 EffectManager 类,当一个 effectmanager 实例被释放时,我会在 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 上遇到断言失败。
它与尝试释放效果图的内存有关,如果我从不将效果插入到地图中,我不会遇到这个问题。
如果我使用基本 STL 地图,它也可以正常工作,即
c++ - boost::ptr_vector 构造函数
我正在尝试boost::ptr_vector
在当前项目中使用 a ,并且想知道是否可以在 push_back() 方法中使用参数化构造函数,或者是否需要使用默认构造函数?
作为次要问题,如果我定义它,它是否仍会使用默认构造函数?
这可能不是最好的后续,但我看到的大多数实现都boost::ptr_vector
表明该push_back()
方法采用new
运算符。是否可以创建一个对象,然后将指向该对象的指针赋予push_back()
容器的方法?
c++ - 快速部分排序对象
我有一个例程,在其中定义了一堆对象(大约 20 个),称为它们Jet
,它们有一个<
我用来对它们进行排序的定义。排序后,我取最低的两个。有什么快速的方法来做到这一点?到目前为止我想到的选项:
boost::ptr_vector<Jet>
使用内置的.sort()
,取前两个,boost::ptr_list<Jet>
, 使用.sort()
, 取前两个- 使用上面的列表,而不是排序,使用
max_element
,删除元素,然后再次运行。
我认为 usingstd::vector<Jet>
是最糟糕的选择,因为:我不需要随机访问;排序将在内存中移动对象;并且在调用时将复制对象push_back(Jet)
。由于需要复制,我还假设 anstd::list<Jet>
会比boost::ptr_list<Jet>
. 我进一步假设采取max_element
两次会比对整个列表进行排序更快。
我的逻辑合理吗?性能差异会很大吗?还有其他我没有想到的选择吗?
c++ - boost::ptr_container 中的克隆分配器和多态性
对于我当前的项目,我正在使用 aboost::ptr_vector
来保持Objects
多态性,并且一切正常,直到我的一个构建 VS2010 抛出它无法克隆它,object
所以我去了,查找克隆,并new_clone()
按照要求实现了方法boost
,然后c++ FAQ做到了,pure virtual
但现在 VS2010 向我扔了这个 shanagin,说它不能在抽象类上使用克隆。
这是否意味着为了让 boost 能够克隆东西,我必须扔掉抽象基类?
笔记:
- 抽象基类的对象在任何时候都不应该存在于程序中,但几乎所有的东西都会被这样对待。
- 当我将克隆方法设为非虚拟方法并为其提供实际返回某些东西的方法时(提供构造函数/复制构造函数,这意味着它们可能存在,这与设计背道而驰)然后编译器会抛出所有驱动类都需要一个默认构造函数。没有它们是设计使然。
编辑:我没有实现delete_clone()
(不知道这是明确要求的,我认为析构函数会很好)
c++ - 包含抽象基类的 ptr_map 的映射对象
我有一个boost::ptr_map
将抽象基类(例如VectorWrapperBase)存储为值,这允许我将字符串映射到不同类型的向量。
这似乎有效。但是,当我memory_map
作为另一个类的成员并尝试将该类存储在 中时std::map
,编译失败。
最后一行失败:
作为 C++ 的新手,这令人费解。
我怀疑错误是由于地图插入复制了AgentMemory
涉及克隆ptr_map
. 而且由于我的VectorWrapper
对象不可克隆,因此引发了错误。
我的问题是:
- 为什么我会收到错误消息?(我的怀疑是否接近实际发生的事情?)
- 我该如何解决这个问题?
为了解决编译错误,我考虑了以下内容,但没有太多 C++ 经验,无法决定哪个更合适:
- 删除纯说明符 (
= 0
) 所以VectorWrapperBase
不再是抽象的- 这感觉就像一个黑客,因为
VectorWrapperBase
不应该被实例化
- 这感觉就像一个黑客,因为
- 使 VectorWrappers 可克隆
- 这似乎可行,但在我的用例中,只有空容器被分配给顶级地图,因此内部的 VectorWrappers
ptr_map
永远不需要被克隆。因此,可克隆性只是为了安抚编译器而不反映实际使用情况。
- 这似乎可行,但在我的用例中,只有空容器被分配给顶级地图,因此内部的 VectorWrappers
- 忘记
ptr_map
并使用std::map
andshared_ptr
代替。- 我不太喜欢这个解决方案,因为我希望矢量包装器的生命周期与地图的生命周期相关联。我也有点担心(也许是不必要的?)
shared_ptr
在大量多线程应用程序中广泛使用的潜在开销。
- 我不太喜欢这个解决方案,因为我希望矢量包装器的生命周期与地图的生命周期相关联。我也有点担心(也许是不必要的?)
c++ - ptr_vector 未正确释放
我正在尝试使用 ptr_vector 来存储一些指针,但是一旦我的 main 方法出现错误。这是我的代码:
这是我收到的错误消息:
我究竟做错了什么?谢谢!
c++ - 在插入之前使用 lower_bound 搜索地图的好处。等价于 ptr_map?
在寻找一种仅在密钥不存在时才插入地图的有效方法时,我遇到了 这种方法:
这适用于std::map
. 但是,boost::ptr_map
不提供类似的形式,insert()
即接受迭代器位置的形式。
所以我想知道:
与直接插入相比,这种方法有什么好处?IE
/li>如果确实有充分的理由使用该
lower_bound
方法,是否有等效的策略boost::ptr_map
?还是不适用?