问题标签 [shared-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 回答
4016 浏览

dll - 在 DLL 接口中使用 boost::shared ptr 可以吗?

在 C++ 中开发一个返回 boost 共享指针并将它们用作参数的 DLL 是否有效?

那么,这样导出函数可以吗?

特别是:引用计数是否跨 DLL 边界工作,或者要求 exe 和 dll 使用相同的运行时?

目的是克服对象所有权的问题。因此,当 dll 和 exe 不再引用它时,该对象将被删除。

0 投票
6 回答
2560 浏览

c++ - 查找 boost::shared_ptr 循环引用

是否有任何提示/技巧来查找 shared_ptr 的循环引用?

这是我试图找到的一个例子 - 不幸的是,我似乎无法在我的代码中找到循环。

0 投票
4 回答
23664 浏览

c++ - 提升,共享ptr与弱ptr?什么时候用?

在我目前的项目中,我使用boost::shared_ptr得相当广泛。

最近我的队友也开始使用weak_ptr. 我不知道该使用哪一个以及何时使用。

除此之外,如果我想转换weak_ptrshared_ptr. 锁定weak_ptr以创建shared_ptr会影响我在其他线程中的代码吗?

0 投票
3 回答
170 浏览

c++ - 为什么我不能使用 getter 访问公共 var?

有一个包含这些语句的文件:

我可以这样使用它:

但不像我想要的那样:

使用getter函数,出现如下错误:

“Housekeeping::TBFInstallation::getTBFCmdHandler”:无法将“this”指针从“const Housekeeping::TBFInstallation”转换为“Housekeeping::TBFInstallation &”

这里出了什么问题?

0 投票
5 回答
35779 浏览

c++ - C++ smart pointer const correctness

I have a few containers in a class, for example, vector or map which contain shared_ptr's to objects living on the heap.

For example

I want to have a public interface of this class that sometimes returns shared_ptrs to const objects (via shared_ptr<const T>) and sometimes shared_ptr<T> where I allow the caller to mutate the objects.

I want logical const correctness, so if I mark a method as const, it cannot change the objects on the heap.

Questions:

1) I am confused by the interchangeability of shared_ptr<const T> and shared_ptr<T>. When someone passes a shared_ptr<const T> into the class, do I:

  • Store it as a shared_ptr<T> or shared_ptr<const T> inside the container?
  • OR
  • Do I change the map, vector types (e.g. insert_element(shared_ptr<const T> obj)?

2) Is it better to instantiate classes as follows: MyExample<const int>? That seems unduly restrictive, because I can never return a shared_ptr<int>?

0 投票
1 回答
2056 浏览

c++ - 维护一个 std::set

我正在用 C++ 编写游戏和随附的引擎。该引擎严重依赖于使用简单的嵌入式脚本语言的自动化。脚本可以创建对象类,在它们上定义事件监听器,并从中产生实例。目前,实例必须绑定到脚本全局标识符才能保持其存在。这样做的明显结果是不能有匿名对象,这将是迄今为止最常见的。

目前,实例是使用 来管理的std::set<Instance*, spatial_sort>,其中spatial_sort是一个按位置对实例进行排序的仿函数,用于渲染和碰撞检测。在假设它们不太可能在五十分之一秒内移动很多的情况下,使用它们的当前位置作为提示,实例被删除并重新插入每一帧。如果dead在实例中设置了标志,则会从集合中删除它。构造Instance函数和析构函数分别调用insert(this)erase(this)

为了允许匿名实例,我想将集合更改为 a std::set<boost::shared_ptr<Instance>, spatial_sort>,这将允许Instance共享实例的所有权并保持它们的存在,直到它们自我毁灭。不幸的是,由于insert()需要将调用放在构造函数中,shared_from_this()因此无法获得shared_ptrInstance. Instance碰巧已经boost::enable_shared_from_this<>通过其基类继承并不重要。

谁能推荐一个合适的解决方法?

编辑:

我做了我一开始应该做的事情,并将Instance类的行为分为两个类:InstanceReference. new SomeClass然后,脚本中的表达式将 a 返回Reference到 new InstanceInstance对象本身从不使用 a 进行管理,shared_ptr因此它们负责自杀以响应合适的事件,例如动画结束、关卡结束等。

谢谢您的帮助!重构是一个很好的解决方案,只要它有效。

0 投票
0 回答
1192 浏览

c++ - 将 shared_ptr 的序列化问题提升到 std 容器

嗨,我正在使用 boost/1.41.0,当我尝试反序列化 shared_ptr 时,以下代码给了我编译错误。它编译成功的序列化部分。如果这是我的代码中的错误或提升的一般问题,有人可以告诉我吗?谢谢。

燕超

0 投票
3 回答
4065 浏览

c++ - 使用 shared_ptr 和 weak_ptr 时避免间接循环引用

我目前正在整理一个严重依赖的应用程序,shared_ptr到目前为止一切看起来都很好——我已经完成了我的功课shared_ptr,并且对使用s的一些陷阱有一个很好的了解。

最公认的问题之一shared_ptr是循环依赖——这些问题可以通过存储weak_ptr不影响链上对象生命周期的 s 来解决。但是,我正在努力解决需要通过 a 存储指向外部对象的指针的时间weak_ptr-我不确定它是否被禁止、不鼓励或是否安全

下图描述了我的意思(黑色箭头表示shared_ptr;虚线表示weak_ptr):

替代文字 http://img694.imageshack.us/img694/6628/sharedweakptr.png

  • 父级包含shared_ptrs 到两个子级,这两个子级都使用 a 指向父级weak_ptr
  • 在第一个孩子的构造函数中,我通过父级检索weak_ptr指向第二个孩子的指针并将其存储在本地。

代码如下所示:

我已经对此进行了测试,它似乎工作正常(我没有收到任何内存泄漏的报告),但是我的问题是:这安全吗?如果没有,为什么不呢?

0 投票
5 回答
8019 浏览

c++ - 关于 shared_ptr 用法的问题 - C++

我对使用shared_ptr.

问题 1

抄袭shared_ptr便宜吗?还是我需要将它作为对我自己的辅助函数的引用并作为值返回?就像是,

问题2

我应该boost::make_shared用来构造一个shared_ptr吗?如果是,它提供了哪些优势?make_sharedT没有无参数构造函数时,我们如何使用?

问题 3

如何使用const foo*?我找到了两种方法来做到这一点。

或者

问题 4

如何返回并检查NULL对象shared_ptr?是不是有点像,

任何帮助都会很棒。

0 投票
5 回答
11909 浏览

c++ - 使用 make_shared 创建 shared_ptr 有什么缺点吗

make_shared<T>()使用 using而不是 using有什么缺点吗shared_ptr<T>(new T)

Boost 文档状态

用户反复请求创建一个给定类型的对象并返回一个 shared_ptr 给它的工厂函数。除了方便和风格之外,这样的函数也是异常安全的,并且速度相当快,因为​​它可以对对象及其相应的控制块使用单个分配,从而消除了 shared_ptr 构造开销的很大一部分。这消除了关于 shared_ptr 的主要效率抱怨之一。