问题标签 [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.
c++ - 禁用适用于 boost::smart_ptr 但不适用于 boost::property_tree 的异常
我正在使用提升 1.57。我需要在我未广泛使用的专有编译器中禁用异常支持。当我需要使用boost::smart_ptr
时,以下步骤就像一个魅力:
使用以下
/li>user.hpp
文件禁用 C++11 支持(使用 编译-DBOOST_USER_CONFIG="<user.hpp>"
):通知 boost 库不要使用异常:
-DBOOST_NO_EXCEPTIONS -DBOOST_EXCEPTION_DISABLE
导致以下编译行:
MyCOMPILER -DBOOST_USER_CONFIG="<user.hpp>" -DBOOST_NO_EXCEPTIONS -DBOOST_EXCEPTION_DISABLE -c Foo.cpp -o Foo.o
那么下面这段代码就编译成功了:
但是当我尝试将上述方法与以下源代码一起使用时,编译出错了:
例如导致以下错误:
最后的问题:
为什么在第一种情况下一切正常,但在第二种情况下不行?如何boost::property_tree
在没有异常支持的情况下正确编译?这甚至可能吗?
c++ - 为什么在 boost::shared_ptr 中使用循环引用时内存泄漏
在以下代码中发生内存泄漏,我对此表示怀疑。在 test() 乐趣中:
// childern_ptr 从堆栈中弹出,我认为 childern_ptr_count-- 和 parent_ptr_count--
// parent_ptr 从堆栈中弹出,我认为 childern_ptr_count-- 和 parent_ptr_count--
// 但实际上它并没有这样做,为什么?
我希望有人可以帮助我,非常感谢。
c++ - 我的自动指针即使在所有权转让后也能正常工作
据我所知, auto_ptr 适用于所有权转移的概念。此外,一旦一个自动指针将其所有权转移到另一个自动指针,它就不能再引用它指向的对象了。但是,我发现的情况并非如此,如下面的程序所示。我错过了什么吗?请帮忙。
第 L1 行:这是如何工作的,因为 p1 不再拥有所有权?
第 L2 行:这是如何工作的,因为 p1 不再拥有所有权?
c++ - 通过 std::weak_ptr 删除对象
我有一个包含数千个对象的 std::vector,存储为 shared_ptr。由于该对象具有许多可用于搜索的属性,因此我使用weak_ptr 在std::map 和std::multimap 上维护此std::vector 的多个索引。
由于 map 和 multimap 是平衡的二叉树,因此搜索/修改速度非常快。但是,我对删除有点困惑。我想在通过索引之一查找对象后删除。锁定weak_ptr 给了我shared_ptr,但它不允许我破坏向量上的对象。有什么方法可以删除向量上的原始对象吗?
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&& 的直接转换来实现移动语义吗?
c++ - shared_ptr 的移动语义
我刚开始学习智能指针,遇到了一个似乎与理论相矛盾的情况。例如,当我们使用 shared_ptr 并且如果调用复制语义时,对象共享所有权并且引用计数为 2。这是可以理解的。例如代码。
输出很好:
现在,如果我尝试将语义移动为
那么 p1 应该已经失去了所有权。因此 p1->Disp() 应该是有效的。因为 make_shared 将转移所有权以及重置 p1。但我仍然可以调用 p1->Disp() 并调用正确的函数。请纠正我的理解。
谢谢。