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

c++ - 在类中传递智能指针作为参数:scoped_ptr 还是 shared_ptr?

我有一个类,它在一个公共方法中创建一个对象。该对象是私有的,对类的用户不可见。然后,此方法调用同一类中的其他私有方法,并将创建的对象作为参数传递:

我相信在这种情况下正确的智能指针将是一个 scoped_ptr,但是,我不能这样做,因为如果以这种方式使用 scoped_ptr 会使类不可复制,所以我应该这样制作方法:

privateMethod1 不存储对象,也不保留对它的引用。只需从Foo类中检索数据。

正确的方法可能是根本不使用智能指针并在堆栈中分配对象,但这是不可能的,因为它使用的库不允许堆栈上的对象,它们必须在堆上。

毕竟,我仍然对 scoped_ptr 的真正用法感到困惑。

0 投票
4 回答
20907 浏览

c++ - 如何启用父级和派生的_shared_from_this

我有我想要的简单基类和派生类shared_from_this()

这个简单的解决方案:

tr1::bad_weak_ptr在以下代码中导致异常:

因此,在“谷歌搜索”之后,我找到了以下解决方案:

现在它可以工作了。

有没有更好、更方便、更正确的方式对enable_shared_from_this父母和孩子都适用?

谢谢

0 投票
2 回答
405 浏览

c++ - 大量 sp_counted_impl_p 对象

我刚刚对我的应用程序中每种类型的对象数量进行了分配分析。我正在广泛使用 boost::shared_ptr。

我发现分配了大量的 sp_counted_impl_p 对象,每个占用 16 个字节。每个 shared_ptr 可以预期有多少 sp_counted_impl_p 对象?有人有想法吗?

0 投票
7 回答
27107 浏览

c++ - 引用计数智能指针的引用计数如何工作?

换句话说,实现如何跟踪计数?

是否维护了一个类似地图的对象,所有shared_ptr实例都可以访问该对象,其键是指针的地址,值是引用的数量?如果我必须实现 a shared_ptr,这是我想到的第一个想法。

在这些引用计数智能指针的情况下是否存在内存泄漏的可能性?如果是这样,我该如何避免它们?

0 投票
9 回答
28349 浏览

c - C的智能指针/安全内存管理?

我和我认为许多其他人在使用智能指针来包装 C++ 中的不安全内存操作(使用 RAII 等)方面取得了巨大成功。但是,当您有析构函数、类、运算符重载等时,包装内存管理更容易实现。

对于使用原始 C99 编写的人,您可以在哪里指出(不是双关语)来帮助安全内存管理?

谢谢。

0 投票
2 回答
495 浏览

c++ - 是否有一个智能指针在其目标在 C++ 中被销毁时自动为空

我找到了 QPointer。还有其他人吗?

0 投票
4 回答
259 浏览

c++ - 智能指针可以选择性地隐藏或重定向对它们包装的对象的函数调用吗?

我正在做一个项目,其中某些对象被引用计数——这是一个与 COM 非常相似的设置。无论如何,我们的项目确实有智能指针,可以减少为这些对象显式调用 Add() 和 Release() 的需要。问题是有时,开发人员仍然使用智能指针调用 Release()。

我正在寻找的是一种从智能指针调用 Release() 创建编译时或运行时错误的方法。编译时间对我来说似乎是不可能的。我以为我有一个运行时解决方案(见下面的代码),但它也不能完全编译。显然,使用 operator->() 后不允许隐式转换。

无论如何,任何人都可以想出一种方法来完成我想要完成的事情吗?

非常感谢您的帮助!

凯文

0 投票
9 回答
26346 浏览

c++ - 返回智能指针时的最佳实践

返回智能指针时的最佳做法是什么,例如 boost::shared_ptr?我应该按标准返回智能指针还是底层原始指针?我来自 C#,所以我倾向于总是返回智能指针,因为它感觉不错。像这样(跳过更短代码的 const 正确性):

但是,我见过一些经验丰富的编码人员返回原始指针,并将原始指针放入向量中。正确的方法是什么?

0 投票
3 回答
2071 浏览

c++ - 如何在 C++ 中维护指向父级的弱指针?

是否有一种标准方法可以在 C++ 中的子对象中维护指向父对象(使用共享指针创建)的弱指针?

本质上,我需要在以下几行中实现一些东西:

在上面所有的B 类实例中都需要持有一个指向它们的父对象(即A 类的对象)的弱指针。A 类对象使用 shared_ptr 实例化。我可以想到一个使用空删除器的解决方案。但这是做这种事情的标准方式吗?

0 投票
2 回答
1624 浏览

c++ - 协变虚函数和智能指针

在 C++ 中,子类可以在重写虚函数时指定不同的返回类型,只要返回类型是原始返回类型的子类(并且两者都作为指针/引用返回)。

是否可以将此功能扩展到智能指针?(假设智能指针是一些模板类)

为了显示:

编辑:正如康拉德鲁道夫建议的那样,这不是直接可能的。但是,我遇到了这种方法:

你会建议走这条路吗?