问题标签 [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 投票
5 回答
23772 浏览

c++ - 是提升 shared_ptr线程安全吗?

我有一个关于boost::shared_ptr<T>.

有很多线程。

第一季度

如果Thread_A不关心nowResource是最新的,这部分代码会有问题吗?

我的意思是当Thread_BSetResource()完全时,Thread_A得到一个错误的智能点GetResource()

第二季度

线程安全是什么意思?

如果我不关心资源是否是最新shared_ptr<CResource> nowResource的,释放时程序会崩溃nowResource还是问题会破坏shared_ptr<CResource>

0 投票
3 回答
3052 浏览

c++ - intrusive_ptr:为什么不提供通用基类?

boost::intrusive_ptr需要intrusive_ptr_add_refintrusive_ptr_release被定义。为什么不提供可以做到这一点的基类?这里有一个例子:http: //lists.boost.org/Archives/boost/2004/06/66957.php,但海报说“我不一定认为这是个好主意”。为什么不?

更新:我认为这个类可能与多重继承一起被滥用这一事实是不够的。任何从具有自己的引用计数的多个基类派生的类都会有同样的问题。这些引用计数是否通过基类实现没有区别。

我认为多线程没有任何问题。boost::shared_ptr提供原子引用计数,这个类也可以。

0 投票
2 回答
284 浏览

c++ - 使用带有“this”的智能指针

我正在学习使用 boost 智能指针,但我对一些情况有点困惑。假设我正在实现一个状态机,其中每个状态都由一个更新方法实现。每个状态都可以返回自己或创建一个新的状态对象:

};

状态机循环如下所示:

你能把这段代码翻译成使用 boost 智能指针吗?当谈到“返回这个”部分时,我有点困惑,因为我不知道该怎么做。基本上我认为返回“return boost::shared_ptr(this);”之类的东西是没有用的 因为它不安全。我应该怎么办?

0 投票
1 回答
60 浏览

boost-smart-ptr - 以原子方式读取 boost shared_ptr

我有 2 个线程访问这个对象。
线程 A:更新 boost hared_ptr 成员 线程 B:读取 boost shared_ptr 成员

由于 shared_ptr 不是整数/实指针类型,线程 B 不能原子地读取它。

我想避免锁。

如何保证线程 B 获得有效的 shared_ptr?

谢谢!

0 投票
3 回答
6768 浏览

c++ - 如何将 boost::weak_ptr 转换为 boost::shared_ptr

我有一个 shared_ptr 和一个 weak_ptr

如何将weak_ptr 转换为shared_ptr

0 投票
4 回答
3683 浏览

c++ - 将 boost::shared_ptr 转换为实际类

有人会怎么做?例如:

其中 it->second 是 boost::shared_ptr 到客户端错误:

0 投票
4 回答
32826 浏览

c++ - boost::shared_ptr 和动态转换

我在使用shared_ptr基类时遇到问题,在取消引用它时似乎无法调用派生类的方法。我相信代码会比我更冗长:

0 投票
1 回答
400 浏览

c++ - boost中有一个通用的“清理”类吗?

我只是想要一个这样做的类:

目的是我有这个“清理”来在 func 被删除时调用它。cleanup 将作为 shared_ptr 传递。

我也考虑过在 boost::shared_ptr 中使用自定义删除器。也许我可以使用 boost::shared_ptr 并使用 NULL 创建并让 func() 获取它忽略的参数。

这一切的目的是抽象出一个步骤,我希望类的析构函数在最后一个引用超出范围时执行(实际上从包含它的容器中删除自己,而类不必知道它的容器)。

如果我用 shared_ptr 来做,我可能会绕过其中之一:

这里 func 必须带一个参数。我不能 100% 确定如果指针为 NULL,删除器总是会被调用,所以也许我需要使用不同的指针,这使得它开始变得“​​凌乱”。

有没有标准的方法来处理这个问题,如果没有,最好的方法是什么?

0 投票
1 回答
1175 浏览

java - 在 Eclipse 中调试 SWIG 包装的 C++ 代码的提示?

我有大量的 C++ 代码,我用 SWIG 包装了这些代码,并从 Java 中调用它。C++ 代码大量使用了 boost 智能指针。

我的一些 JUnit 测试完成了,但是在清理过程中遇到了段错误。堆栈跟踪表明对象的最终确定中存在内存错误,但它发生在 SWIG 生成的 JNI 代码中,并且似乎与智能指针引用计数相关联。

我希望能够单步执行代码的所有层。这可能吗?我也很高兴听到其他人在此类问题上的经历。

0 投票
3 回答
527 浏览

c++ - 到期后 boost::weak_ptr 的排序顺序?

Forboost::weak_ptroperator<定义,以便它可以在关联容器中使用。

我的问题是:weak_ptr即使其中一些对象的引用计数变为零,几个对象的排序顺序是否稳定?这不会与容器类似std::set吗?

例子:

  • 如果断言#1 为真,断言#2 是否总是成立?
  • wptrA2Scope 1 前后是否处于相同状态?