问题标签 [boost-smart-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 投票
0 回答
465 浏览

c++ - 禁用适用于 boost::smart_ptr 但不适用于 boost::property_tree 的异常

我正在使用提升 1.57。我需要在我未广泛使用的专有编译器中禁用异常支持。当我需要使用boost::smart_ptr时,以下步骤就像一个魅力:

  1. 使用以下user.hpp文件禁用 C++11 支持(使用 编译-DBOOST_USER_CONFIG="<user.hpp>"):

    /li>
  2. 通知 boost 库不要使用异常:-DBOOST_NO_EXCEPTIONS -DBOOST_EXCEPTION_DISABLE

  3. 导致以下编译行:MyCOMPILER -DBOOST_USER_CONFIG="<user.hpp>" -DBOOST_NO_EXCEPTIONS -DBOOST_EXCEPTION_DISABLE -c Foo.cpp -o Foo.o

那么下面这段代码就编译成功了:

但是当我尝试将上述方法与以下源代码一起使用时,编译出错了:

例如导致以下错误:

最后的问题:

为什么在第一种情况下一切正常,但在第二种情况下不行?如何boost::property_tree在没有异常支持的情况下正确编译?这甚至可能吗?

0 投票
3 回答
201 浏览

c++ - 为什么在 boost::shared_ptr 中使用循环引用时内存泄漏

在以下代码中发生内存泄漏,我对此表示怀疑。在 test() 乐趣中:

  1. // childern_ptr 从堆栈中弹出,我认为 childern_ptr_count-- 和 parent_ptr_count--

  2. // parent_ptr 从堆栈中弹出,我认为 childern_ptr_count-- 和 parent_ptr_count--

  3. // 但实际上它并没有这样做,为什么?

我希望有人可以帮助我,非常感谢。

0 投票
1 回答
140 浏览

c++ - 我的自动指针即使在所有权转让后也能正常工作

据我所知, auto_ptr 适用于所有权转移的概念。此外,一旦一个自动指针将其所有权转移到另一个自动指针,它就不能再引用它指向的对象了。但是,我发现的情况并非如此,如下面的程序所示。我错过了什么吗?请帮忙。

第 L1 行:这是如何工作的,因为 p1 不再拥有所有权?

第 L2 行:这是如何工作的,因为 p1 不再拥有所有权?

0 投票
3 回答
1684 浏览

c++ - 通过 std::weak_ptr 删除对象

我有一个包含数千个对象的 std::vector,存储为 shared_ptr。由于该对象具有许多可用于搜索的属性,因此我使用weak_ptr 在std::map 和std::multimap 上维护此std::vector 的多个索引。

由于 map 和 multimap 是平衡的二叉树,因此搜索/修改速度非常快。但是,我对删除有点困惑。我想在通过索引之一查找对象后删除。锁定weak_ptr 给了我shared_ptr,但它不允许我破坏向量上的对象。有什么方法可以删除向量上的原始对象吗?

0 投票
1 回答
410 浏览

c++11 - 使用带有移动语义的 C++11 - 没有标准库(和 Boost.smart_ptr)

我正在从事嵌入式项目,使用Zephyr RTOS和 ARM 嵌入式微控制器,如 STM32 Nucleo 系列(Cortex M4/0)。

最近,由于最近版本的 Zephyr 对 C++ 的支持显着改进,我正在考虑从 C 开发转向现代 C++。

默认情况下,Zephyr 包含 C 标准库,但不包含 Cpp 的 STD。

Zephyr 实际上添加了对 Cpp 标准库的可选支持,这似乎工作得很好。然而,它需要大量的闪存使用(我的微控制器闪存中接近 65%,没有我的代码!)。

因此,我正在尝试寻找在没有实际标准库(包括内存/实用程序头文件)的情况下使用现代 C++ 的替代方法。

我考虑过将Boost.smart_ptr用于智能指针,但我想知道在我的情况下我应该如何使用移动语义 (std::move)。

我应该使用Boost.Move模块吗?即使我使用的是 C++1x 而不是 C++0x?

我应该自己使用从 T& 到 T&& 的直接转换来实现移动语义吗?

0 投票
1 回答
62 浏览

c++ - shared_ptr 的移动语义

我刚开始学习智能指针,遇到了一个似乎与理论相矛盾的情况。例如,当我们使用 shared_ptr 并且如果调用复制语义时,对象共享所有权并且引用计数为 2。这是可以理解的。例如代码。

输出很好:

现在,如果我尝试将语义移动为

那么 p1 应该已经失去了所有权。因此 p1->Disp() 应该是有效的。因为 make_shared 将转移所有权以及重置 p1。但我仍然可以调用 p1->Disp() 并调用正确的函数。请纠正我的理解。

谢谢。