问题标签 [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.
c++ - 什么是 boost 的 shared_ptr(shared_ptrconst & r, T * p) 用于?
boost::shared_ptr
有一个不寻常的构造函数
我有点困惑这会有什么用。基本上它共享所有权r
,但.get()
会返回p
。不 r.get()
!
这意味着您可以执行以下操作:
你会得到这个:
请注意,指针是分开的,但它们都声称 ause_count
为 2(因为它们共享同一对象的所有权)。
因此,只要或int
存在,所拥有的就会存在。如果我理解文档正确,第二个永远不会被破坏。我已经通过以下测试程序确认了这一点:x
x
y
int
这输出(如预期):
那么......这个不寻常的结构有什么用处,它共享一个指针的所有权,但在使用时就像另一个指针(它不拥有)。
c++ - C++ 和智能指针——智能指针在这种情况下有什么帮助?
令我感到羞耻的是,我没有机会在实际开发中使用智能指针(主管认为它太“复杂”并且浪费时间)。但是,我计划将它们用于我自己的东西......
我遇到了关于在模块完成后或在加载新数据时取消初始化模块的情况。当我使用指针时,我发现我的代码中到处都是检查 null ,例如这样......
如果我要使用智能指针而不是原始指针,如何缓解这个问题?
c++ - Qt 中的智能指针
就像这里写的一样, Qt 到目前为止有 8 个专门的智能指针类。看起来这就是您所需要的一切。但是,为了使用这些智能指针中的任何一个,您的类必须从 QObject 派生,这并不总是很方便。Qt 中是否有其他可用于任意类的智能指针实现?
c++ - C++ 初始化列表和内存分配
以下内容有效吗?
我是否正确地假设初始化将完全按照我在 ctor 中给出的顺序发生?如果不是,如果 m_nDataLength 的初始化发生在 m_pData 之后怎么办?
c++ - 是否可以使用智能指针进行切片?
如果我正确理解切片,我认为指针或智能指针不会发生这种情况。例如,如果您有:
我的理解是分配给“b”指向的对象的内存块仍然是相同的,并且在分配给智能指针“a”时不会改变。
请确认或拒绝我的理解,或让我知道与此相关的任何陷阱。
c++ - shared_ptr 与 scoped_ptr
scoped_ptr
不可复制,正在从范围中删除。所以它是一种限制shared_ptr
。因此,除了确实需要限制复制操作的情况外,似乎shared_ptr
更好用。因为有时您不知道是否需要创建对象的副本。所以问题是:除了上面提到的情况外,我们是否可以认为shared_ptr
更好(或推荐)使用而不是scoped_ptr
. 是否scoped_ptr
工作得更快shared_ptr
,或者它有什么优势?
谢谢!
c++ - 在运行时有条件地实例化模板
我有一个模板类
现在在我的主代码中,我想根据条件实例化模板类。喜欢 :
现在这种方法的问题是auto_ptr<>
在switch{}
. 而且我不能在函数的开头声明它,因为我不知道预先实例化的类型。
我知道我正在尝试在编译时(使用模板)实现运行时的东西,但仍然想知道是否有更好的方法来做到这一点。
c++ - 如何使用 shared_ptr 避免内存泄漏?
考虑以下代码。
没有输出。没有调用析构函数。内存泄漏。我一直认为智能指针有助于避免内存泄漏。
如果我需要在类中进行交叉引用,我应该怎么做?
c++ - C ++ SmartPointers在自我分配时泄漏?
我有小问题理解为什么我的智能指针类在自我评估时泄漏。如果我做这样的事情
我的同事告诉我,我的智能指针泄漏了。我在我的智能指针中添加了一些日志消息来跟踪正在发生的事情和测试并报告了这一点:
我不明白为什么他们认为我的智能指针泄漏了……有什么想法吗?先感谢您!
c++ - 投射提升::shared_array提升::shared_array
我怎样才能boost::shared_array<char>
投到boost::shared_array<const char>
?