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

c++ - shared_ptr 与 scoped_ptr

scoped_ptr不可复制,正在从范围中删除。所以它是一种限制shared_ptr。因此,除了确实需要限制复制操作的情况外,似乎shared_ptr更好用。因为有时您不知道是否需要创建对象的副本。所以问题是:除了上面提到的情况外,我们是否可以认为shared_ptr更好(或推荐)使用而不是scoped_ptr. 是否scoped_ptr工作得更快shared_ptr,或者它有什么优势?

谢谢!

0 投票
3 回答
4354 浏览

c++ - 通过引用传递 scoped_ptr 是一种好习惯(从一个方法到另一个类中的方法)?

或者如果我需要这样做,那么我应该只使用 shared_ptr 吗?

0 投票
2 回答
539 浏览

c++ - scoped_ptr 用于具有替代自由方法的结构

我有一个结构

它可以使用创建

并删除使用

我希望为结构分配的内存自动释放

为此,我写了一个模板

并像那样使用它

如何使用 stl 或 boost 使其成为更标准的方式?

0 投票
3 回答
1231 浏览

c++ - 类成员变量的非共享智能指针

当我有一个包含指针作为成员变量的类时,如果我不想使用普通指针,它们应该有什么类型的智能指针?它们不需要共享(因此不需要 shared_ptr)。scoped_ptr 不起作用,因为我经常需要在初始化列表之外构建对象。

或者,当某些事情仍然可能失败(抛出异常等)时,在创建过程中使用 scoped_ptr 并随后将它们分配给普通指针是否可能是一种常见的做法?

0 投票
2 回答
5393 浏览

c++ - C++:可以在构造函数中初始化 boost::scoped_ptr 吗?

boost::scoped_ptr可以在类的构造函数中初始化类型的类成员吗?如何?
(不在初始化列表中)

0 投票
2 回答
4593 浏览

c++ - 为什么我不能从函数返回 Boost::Scoped_ptr?

所以我尝试围绕 boost.extension 函数创建一些包装器来创建类。所以我创建了一个函数:

调用:

但最后不是那么重要。重要的是 - 我无法让我的函数返回=(

我尝试这样的方式:

我也试过:

但是编译器告诉我C2248它不能调用一些私有成员boost::scoped_ptr<T>

那么如何让我的退货......可退货//如何接收它?

0 投票
4 回答
1003 浏览

c++ - 对 scoped_ptr 的弱引用?

一般来说,我遵循谷歌风格指南,我觉得这与我看待事物的方式非常吻合。我也几乎完全使用 boost::scoped_ptr 以便只有一个管理器拥有特定对象的所有权。然后我传递裸指针,我的想法是我的项目的结构使得所述对象的管理器总是在使用它们的对象被销毁后被销毁。

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Smart_Pointers

这一切都很好,但是我只是被一个令人讨厌的小内存踩踏错误咬住了,其中所有者恰好在使用它的对象被删除之前被删除。

现在,在每个人都认为我是这种模式的傻瓜之前,我为什么不直接使用 shared_ptr 呢?等等,考虑一下我不想有未定义的所有者语义这一点。尽管 shared_ptr 会捕捉到这种特殊情况,但它会向系统用户发送错误消息。它说:“我不知道这是谁的,可能是你!”

对我有帮助的是指向作用域指针的弱指针。实际上,一个具有弱引用列表的作用域指针,当作用域指针解构时,这些弱引用被清空。这将允许单一所有权语义,但让使用对象有机会捕捉我遇到的问题。

因此,以一个额外的 'weak_refs' 指针为 scoped_ptr 和一个额外的指针为 'next_weak_ptr' 中的weak_ptr 为代价,它将成为一个简洁的小型单所有者、多用户结构。

它甚至可能只是一个调试功能,因此在“发布”中,整个系统只是变回正常大小的 scoped_ptr 和弱引用的标准单指针。

所以.....毕竟我的问题是:

  1. stl/boost 中是否已经有这样的指针/模式,我错过了,还是我应该自己滚动?
  2. 有没有更好的方法,仍然可以满足我的单一所有权目标?

干杯,谢恩

0 投票
2 回答
31967 浏览

c++ - boost::scoped_ptr 之间的区别和 std::unique_ptr

具有移动语义而仅仅是获取/重置智能指针的唯一区别boost::scoped_ptr<T>std::unique_ptr<T>事实是什么?std::unique_ptr<T>boost::scoped_ptr<T>

0 投票
3 回答
2273 浏览

c++ - 模板中的 pimpl-idiom;哪个智能指针?

我通常将 boost::scoped_ptr 用于 pimpl(原因之一是因为如果我忘记处理复制构造函数,我不会感到惊讶)

但是,对于模板,我不能只将析构函数放在完全定义 impl 的 cpp 文件中,以满足 scoped_ptr 析构函数的要求。无论如何它确实有效,但我不确定它是保证有效还是偶然。是否有一些“最佳实践”或标准?scoped_ptr 是不可复制类中 pimpls 的最佳智能指针吗?

0 投票
4 回答
1851 浏览

c++ - 为什么 boost::scoped_ptr 在单例实现中被清除

我使用 boost::scoped_ptr 实现了一个简单的单例:

定义一个真正的单例类:

然后我在文件 S.cpp 中定义一个静态变量:

在 main.cpp 中:

运行这个程序,发生了异常:

/usr/include/boost/smart_ptr/scoped_ptr.hpp:91: T& boost::scoped_ptr::operator*() const [with T = S]: Assertion `px != 0' failed

跟踪代码,我发现一旦代码离开静态初始化段,静态 s_instance.t 就会被清除,之后所有引用 S::instance 的代码都将获得 NULL scoped_ptr。有人知道原因吗?

[更新] 我试图将所有静态文件放入一个 cpp 文件(S1.cpp):

并用 GDB 调试它,它看起来按照我写的顺序。任何想法?