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

c++ - 什么是 boost 的 shared_ptr(shared_ptrconst & r, T * p) 用于?

boost::shared_ptr有一个不寻常的构造函数

我有点困惑这会有什么用。基本上它共享所有权r,但.get()会返回p r.get()

这意味着您可以执行以下操作:

你会得到这个:

请注意,指针是分开的,但它们都声称 ause_count为 2(因为它们共享同一对象的所有权)。

因此,只要int存在,所拥有的就会存在。如果我理解文档正确,第二个永远不会被破坏。我已经通过以下测试程序确认了这一点:xx yint

这输出(如预期):

那么......这个不寻常的结构有什么用处,它共享一个指针的所有权,但在使用时就像另一个指针(它不拥有)。

0 投票
7 回答
8496 浏览

c++ - 手动增加和减少 boost::shared_ptr?

有没有办法在 C++ 中手动增加和减少 shared_ptr 的计数?

我试图解决的问题如下。我正在用 C++ 编写一个库,但接口必须是纯 C。在内部,我想使用 shared_ptr 来简化内存管理,同时保留通过 C 接口传递原始指针的能力。

当我通过接口传递一个原始指针时,我想增加引用计数。然后,客户端将负责调用一个函数,该函数将在不再需要传递的对象时减少引用计数。

0 投票
7 回答
3772 浏览

c++ - 不需要大量库的体面的 shared_ptr 实现?

我现在正在学习关于 GIS 编程的 C++ 编程课程。我真的开始因为处理适当的内存管理而头疼。考虑到任何时候通常都有 8-10 个类,每个类都持有一个指向 3D 矩阵或其他非常大的东西的指针。现在我们的班级已经提出了 prof 允许我们使用 Boost 的问题,或者至少是 2008 年的 C++ Feature Pack(对于 TR1)。他拒绝了,但说如果我们愿意,我们可以找到添加一些第三方 cpp/hpp 文件。我已经尝试过让 shared_ptr 脱离 boost ,但这比它的价值更令人头疼。

那么那里有任何免费的 shared_ptr 实现吗?

0 投票
4 回答
2626 浏览

eclipse - 获取 Eclipse CDT + boost::shared_ptr使用语法完成?

如何让 Eclipse CDT 将 shared_ptr 视为 T * 以完成语法?

在这种情况下,我使用的是 Windows。我在“程序文件”文件夹中有 1.39。我即将尝试1.37。

我正在使用 Eclipse 的 Galileo 版本。另外,我只是在 Eclipse 中编辑和浏览源代码并在 VC++ Express 中构建。(不过那是另一回事了)

0 投票
14 回答
33671 浏览

c++ - 如何从 boost::shared_ptr 释放指针?

boost::shared_ptr 可以释放存储的指针而不删除它吗?

我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不​​唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针?或者使用哪个 boost 智能指针类可以让我释放指针?我希望你不要说使用 auto_ptr :)

0 投票
4 回答
3563 浏览

c++ - C++ 对 shared_ptr 的引用与引用

全部,

我最近在 DAL 设计上发布了这个问题。由此看来,将对对象的引用传递给函数,然后函数填充该对象,这对于 C++ 数据访问层来说是一个很好的接口,例如

我现在想知道是否使用对 boost::shared_ptr 的引用会更好,例如

有什么想法吗?一个比另一个有优势吗?

将 const 正确性应用于两个调用会有什么影响?

提前致谢。

0 投票
7 回答
3608 浏览

c++ - 共享指针和性能

我现在一直在使用共享指针,而且我的程序存在性能问题......所以我想知道共享指针是否会导致性能下降。如果是这样,那有多难?非常感谢。

我的程序是多线程的,使用 std::tr1::shared_ptr

0 投票
4 回答
3482 浏览

c++ - 如何修复堆损坏

我试图构建一个非常简约的内存读取库来读取一些unsigned ints。ReadUnsignedInt但是,当方法想要返回时,我遇到了“HEAP CORRUPTION DETECTED”错误消息。

检测到堆损坏。CRT 检测到应用程序在缓冲区结束后写入内存。

正如我所读到的,这可能是尝试双重删除某些内容的原因。这可能是由于一些不正确的使用引起的,std::tr1::shared_ptr但我无法确定我对它们做错了什么。代码如下(省略错误处理):

0 投票
6 回答
4224 浏览

c++ - 如何在 C++ 中设计一个高效的图像缓冲区?

我正在尝试创建一个数据缓冲区,更具体地说,是一个图像缓冲区,它将在多个模块之间共享。这些模块只从缓冲区读取,根本不相互通信。我的困难是:

1.数据量大:

每个图像大于 10M,这意味着不希望为不同的线程复制这些数据

2.我不希望记忆变得疯狂:

随着新数据的不断涌入(实时),非常旧的数据必须在所有模块使用完毕后删除。

然而,为了让事情变得更加复杂,那些消耗数据的模块的速度不同:有些更快/更慢,有些需要更多数据(多张图像)才能获得结果,有些需要更少(只有一张图像)

我一直在考虑使用 shared_ptr 来解决第一个问题:创建一个 boost shared_ptr(s) 的队列,每个 shared_ptr() 指向一个图像(char 数组)。然后将这些指针的子集传递给不同的模块。

我是这个智能指针领域的新手。什么是解决这个问题的好方法?

谢谢。

0 投票
4 回答
14309 浏览

c++ - 在 dll 接口中使用 shared_ptr

我的 dll 中有一个抽象类。

我想进入IBase加载 dll 的 exe 文件。第一种方法是创建以下功能

并在中添加虚函数Release()IBase

第二种方法是创建另一个函数

并且不需要任何Release()功能。

问题。

1)在第二种情况下,在dll(而不是在exe文件中)调用析构函数和内存释放是真的吗?

2)如果 exe 文件和 dll 是用不同的编译器(或不同的设置)编译的,第二种情况是否能正常工作。