问题标签 [smart-pointers]

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 投票
3 回答
2111 浏览

c++ - Why is there no boost::copy_on_write_ptr?

I just saw this nice copy-on-write pointer implementation. It looks pretty generic and useful, so my question is: Is such a class contained in any of the C++ toolkits (boost, loki, etc.)? If not, I'd really like to know why because it is a really useful idiom and apparently a generic implementation seems doable (like the one I linked to).

0 投票
2 回答
1408 浏览

c++ - 为什么weak_ptr可以打破循环引用?

我学到了很多关于weak_ptr 与share_ptr 一起打破循环引用的知识。它是如何工作的?怎么用?任何机构都可以给我一个例子吗?我完全迷失在这里。

还有一个问题,什么是强指针?

0 投票
4 回答
1188 浏览

c++ - 没有更多引用时如何从缓存中删除智能指针?

我一直在尝试使用智能指针来升级现有的应用程序,并且我正在尝试克服一个难题。在我的应用程序中,我有一个对象缓存,例如让我们称它们为书籍。现在这个图书缓存是由 ID 请求的,如果它们在缓存中,则返回它们,如果不是,则从外部系统请求对象(慢操作)并添加到缓存中。一旦进入缓存,可以在应用程序中打开许多窗口,每个窗口都可以引用本书。在以前版本的应用程序中,程序员必须维护 AddRef 和 Release,当每个使用 Book 对象的窗口关闭时,最终的 Release(在缓存管理器上)将从缓存中删除对象并删除该对象。

您可能已经在这里发现了链中的薄弱环节,当然是程序员记得调用 AddRef 和 Release。现在我已经转向智能指针 (boost::intrusive) 我不再需要担心调用 AddRef 和 Release。然而这导致了一个问题,缓存有一个对象的引用,所以当最后一个窗口关闭时,缓存不会被通知没有其他人持有引用。

我的第一个想法是定期遍历缓存并清除引用计数为 1 的对象。我不喜欢这个主意,因为它是一个 Order N 操作并且感觉不对。我想出了一个回调系统,它更好但并不出色。我已经包含了回调系统的代码,但是我想知道是否有人有更好的方法来做到这一点?

干杯丰富

0 投票
4 回答
45022 浏览

c++ - 不推荐使用 auto_ptr 吗?

  1. auto_ptr 会在传入的 C++ 标准中被弃用吗?
  2. 是否应该使用 unique_ptr 而不是 shared_ptr 进行所有权转移?
  3. 如果 unique_ptr 不在标准中,那么我需要改用 shared_ptr 吗?
0 投票
4 回答
379 浏览

c++ - 确保用户使用 shared_ptr 而不是常规 ptr 的正确方法是什么?

在我的类中,构造函数是私有的,我添加了一个静态方法“CreateMyClassPtr”,它使用构造函数并返回它的 share_ptr。

它是正确的实现吗?

你认为我什至必须确保它shared_ptr会被使用吗?我应该把它留给用户来决定吗?

0 投票
1 回答
343 浏览

c++ - 为什么要将 DB 连接指针对象实现为引用计数指针?(C++)

在我们公司,核心 C++ 类之一(数据库连接指针)被实现为引用计数指针。需要明确的是,对象本身不是数据库连接,而是指向数据库连接对象的指针。

图书馆很旧了,设计的人都不在了。

到目前为止,我以及我询问的公司中的任何 C++ 专家都没有提出选择这种特殊设计的充分理由。有任何想法吗?

它引入了一些问题(部分是由于使用了糟糕的引用指针实现),我试图了解这种设计是否真的有一些深层的潜在原因?

这些天的使用模式似乎是 DB 连接指针对象由 DB 连接管理器类返回,并且有点不清楚 DB 连接指针是否被设计为能够独立于 DB 连接管理器使用。

0 投票
1 回答
6368 浏览

c++ - 我可以通过引用函数来传递 auto_ptr 吗?

以下功能是否OK:

0 投票
3 回答
639 浏览

c++ - 如何使用引用、避免标题膨胀和延迟初始化?

我正在浏览使用这么多 shared_ptrs 的替代方法,并在评论部分找到了一个很好的回复:

你真的需要共享所有权吗?如果您停下来思考几分钟,我相信您可以确定该对象的一个​​所有者,以及它的许多用户,他们只会在所有者的一生中使用它。因此,只需使其成为所有者的本地/成员对象,并将引用传递给需要使用它的人。

我很想这样做,但问题是拥有对象的定义现在需要首先完全定义拥有的对象。例如,假设我在 FooManager.h 中有以下内容:

现在,根据上面的建议,FooManager.h 变为:

我有两个问题。首先,FooManager.h 不再是轻量级的。每个包含它的 cpp 文件现在也需要编译 Foo.h。其次,我不再可以选择何时初始化 foo。它必须与 FooManager 同时初始化。我该如何解决这些问题?

0 投票
2 回答
2872 浏览

c++ - 如何仅将 BOOST 智能指针代码包含到项目中?

什么是仅包含 boost 智能指针库而不将所有 boost 库添加到项目中的最佳实践?

我只想在我的项目中提升智能指针库,我不想仅仅为此将200 MB源代码(提升 1.42.0)签入/提交到我的项目存储库中。更重要的是,我的 windows mobile 项目本身甚至没有达到那个大小的 10%!

0 投票
1 回答
283 浏览

c++ - 有人给这些智能指针(auto_any、scoped_any、shared_any)试驾了吗?

我正在研究用于 Windows CE 和 Mobile 的具有“共享”功能的智能指针,其中std::shared_ptr无法使用 VS 2008 tr1(由于链接到 CE 上不存在的 v.9 dll,显然,如果我理解正确的话)。

有一篇半旧的 MSDN 杂志文章,其来源来自 Microsoftie (Eric Niebler):使用我们的自定义 C++ 类实现更可靠的资源管理

他的推理、设计和实现shared_any看起来很可靠,但我想知道是否有人在任何平台(不一定是 WinCe/WM)上实际测试过这个批次?