问题标签 [ptr-vector]

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

c++ - 如何从 boost ptr_vector 中检索引用?

我有两个类:一个 Object 类和一个 ObjectManager 类。ObjectManager 类通过 ptr_vector 容器存储“对象”。在某些情况下,我需要检索对这些存储的指针的引用以对它们执行单独的操作。我该怎么做呢?

可编译的伪代码:

基本上我希望 ObjectManager 保留所有权,但我也希望其他类能够获得对该对象的引用,根据正在发生的事情对该对象使用调用方法,然后继续。

0 投票
1 回答
2433 浏览

c++ - 在 Ptr_Vector 上提升 FOR_EACH?

我目前正在尝试学习一些 Boost 库。我目前正在做我想这将是一个未来的家庭作业项目(学期还没有开始)。但是,这个问题不是关于作业问题,而是关于 Boost。

代码:

BOOST_FOREACH 用于使用与上面完全相同的代码处理法线向量。由于我已经开始使用 ptr_vectors 我得到了错误:

error C2440: '=' : cannot convert from 'Bid' to 'Bid *'

让我相信 ptr_vector 以某种方式掩盖了 foreach 方法的指针。

如果我改为写

我得到四个类型的错误

error C2819: type 'Bid' does not have an overloaded member 'operator ->'

这很糟糕,因为我知道出价是一个指针。

我怎样才能BOOST_FOREACH正确地迭代ptr_vectors

0 投票
1 回答
293 浏览

c++ - 存储在 ptr_vector 中的派生类没有被破坏

试图找到使用 ptr_vector 存储、访问和释放对象的最佳方法,尤其是当存储的对象是从其他对象继承时(ptr_vector 应该没有对象切片的任何问题)。但是当运行下面的程序时,令人惊讶的是派生类并没有被破坏。有谁知道为什么?

该程序的输出是:

为什么B0没有被破坏?对象被切片了吗?

0 投票
2 回答
653 浏览

c++ - ptr_vector 迭代器不需要增量吗?

请注意,第二个 for 循环不会增加迭代器,但它会迭代并擦除所有元素。我的问题是:

  1. 我的迭代技术和使用迭代器是否正确?
  2. 如果 for 循环中不需要迭代器增量,那么增量发生在哪里?
  3. 使用迭代器更好还是普通整数就足够了(即:使用迭代器是否有任何增值)?(因为我也可以像 pv.erase(pv.begin()+5); 一样擦除第 5 个元素;)
  4. 有没有办法直接将新对象分配给 ptr_vector 的特定位置(比如说第 5 个位置)?我正在寻找类似 pv[5]=new Derived(5); 的东西。有什么办法吗?
0 投票
1 回答
4426 浏览

c++ - boost::shared_ptr 语义(复制)

我只是想有一双新的眼睛,下面的代码是正确的:

对象 trifoo 中包含的指针(存储在 ptr_vector 中)是共享指针 f、g、h。

还有,trifoo的构造函数中shared_ptr拷贝的结果是什么;这是“共享”shared_ptr 的正确方法吗,确保引用计数增加等等。我能够测试验证的所有其他疑问,但我不确定如何(正确)检查这一点。也欢迎任何批评。

注意:没有意义的循环是为了测试内存泄漏,没有发生。

0 投票
1 回答
529 浏览

c++ - 我应该自己擦除 boost::ptr_vector 的指针吗?

我想知道这段代码是否泄漏:

int main()
{
boost::ptr_vector <char> v;
v.push_back(new char[10]);
v.clear()
}

ptr_vector 析构函数或 clear() 函数会删除它包含的指针还是我必须自己做?

0 投票
1 回答
739 浏览

c++ - 在 boost::ptr_vector 中访问派生对象

我正在使用 boost::ptr_vector < class A > ,我还使用它来存储 B 类的对象:公共类 A。我希望能够访问向量中的 B 类对象;我如何投射以获得访问权限?

0 投票
1 回答
377 浏览

c++ - C++ 在 boost::ptr_container 中共享元素?

请考虑以下代码:

我不想copy将元素放入vec1,而是以提供的方式共享shared_ptr<>。我的要求基本上是:

  • 在另一个容器实例中共享作为容器一部分的一系列对象的相同实例
  • 不想在超过这两个容器中共享一个实例
  • 希望在一个元素“突然”从另一个容器中删除时收到通知(或者至少检查一下,例如类似的东西shared_ptr::unique()

两个容器都属于同一类。因此,它们具有相同的范围,并且将同时被销毁。这些类的构造函数构造了两个容器。建造完成后,这些容器不会有任何修改。

我需要使用 a std::vector<>ofshared_ptr<>还是有其他解决方案?

0 投票
2 回答
134 浏览

c++ - 错误:“Config::testMap”的使用无效

这是代码:

我是地图新手 - 以前从未使用过。我在网上找到了很多如何使用它们的例子。不幸的是,我似乎无法理解它们的更高级示例。

我想做的是创建一个带有键(std::string)和值(boost::ptr_vector<struct>)的地图。

我打算首先声明并成功传递它。然后我想试着弄清楚如何填满它。

我遇到了一个非常模糊的错误,我不知道如何解释它。

关于我在“使用”中做错了什么有什么建议testMap吗?

另外,有人可以提供一些简单的例子来说明我如何填充地图。

假设我想要一个 的键a和一个 的值str1 = "hello", var1 = 10。我该怎么做?

跟进问题:关于Kerrek SB 留下的答案。

如果我执行以下操作...

我收到以下错误:

相反,如果我执行该.insert()方法,则会收到以下错误:

跟进:

根据我的研究,这是不可能的。

您不能ptr_vector在地图中使用 a。(所以我被告知)由于所有权/复制问题?

“当您尝试复制 ptr_vector 时会发生什么,这必然会发生在地图内?指针容器模拟指针的独占所有权。

你可以用 C++0x 和 std::move 做到这一点,但这对你没有帮助。”

谁能提供一个反例?

0 投票
1 回答
324 浏览

c++ - 添加成员 boost::ptr_vector<>

我有休闲课程:

要将 CpuCore 对象添加到 cpuCores 向量中,我应该添加一个指针吗?或者我可以正常复制该值,例如:

使用 CpuCore *_newVal 参数,我有以下错误:
../src/usage/CpuUsage.h:42: error: 'boost::ptr_vector > CpuUsage::cpuCores' is private ../src/NodeInfoGather.cpp: 73:错误:在这种情况下

向量在这里是私有的有什么问题?

谢谢,