问题标签 [make-shared]
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++ - 在什么意义上,weak_ptr“拥有”一个 shared_ptr?
我试图为这个问题写一个标题大约 10 分钟,你会看到我最终失败了。[编者注:我想我已经解决了这个问题。]
我正在阅读Herb Sutter 的博客,主题是使用 std::make_shared 及其优缺点。请看附上的照片:
这是一篇非常有趣的文章的一小部分,我强烈建议人们阅读。我的问题是关于这句话:
一个“弱引用”计数,用于跟踪当前观察对象的weak_ptrs 数量。当最后一个弱引用消失时,共享内务控制块被销毁和释放(如果共享对象尚未释放,则共享对象被释放)。**
我真的不明白这个说法。std::shared_ptr
最初,当我们通过make_shared
eg创建 a 时,当前没有观察 sp1 的弱 ptrs,因此当以通常的方式超出范围auto sp1 = make_shared<widget>();
时,它将被删除。shared_ptr
那么添加弱引用如何改变这种行为呢?谁能给我解释一下?
c++ - make_unique 和 make_shared 处理数组时的区别
从 C++17 开始,您可以使用make_unique
它来创建指向数组的智能指针,例如:
这将创建一个指向 10 个元素的数组的智能指针(正确的 deleter[] 将被调用的事实也很棒)。
但是据此不 make_shared
支持此类功能(据我了解,至少在 C++17 中不支持):
上面的代码显然是非法的。事实上,我的 Visual Studio 2017 (v141) 吐出以下错误:
有趣的是它shared_ptr
本身确实支持数组类型(即合法),但shared_ptr<int[]>
不支持。而确实如此。make_shared
make_unique
问题是,是什么阻止了标准制定者让make_shared
支持数组类型,就像make_unique
?
c++ - GCC 8 无法编译 make_shared()
这段代码可以干净地编译,并且可以与我尝试过的所有编译器一起使用,除了 GCC 8(和当前的 GCC 主干):
我想知道:
- GCC 8 拒绝此代码是否正确?
- 是否有 GCC 8 将接受的替代品(具有相同的语义和性能)?我知道
std::atomic
,但语义不一样,所以建议使用它而不是volatile
我想要的。
c++11 - C++ 中的 make_shared() 引用计数
出自:C++ 之旅(第二版)
13.2.1 unique_ptr 和 shared_ptr
使用make_shared()不仅比使用 new 单独创建对象然后将其传递给 shared_ptr 更方便,而且它也明显更有效,因为它不需要单独分配使用计数,这在实现shared_ptr。
我的问题:为什么shared_ptr需要为引用计数分配内存而make_shared()不需要?(它是否只会在至少有两个对数据的引用时才分配它?)
编辑:我没有注意到文本中的“单独”这个词,所以我的问题是无关紧要的,Tough - 我仍然想问为什么 make_shared() 更有效
c++11 - 如何使用 make_shared 创建相同类型的对象数组?
与使用“new”相比,我们可以使用“make_shared”更快、更安全地创建对象。例如,
如果我需要创建一个对象数组(例如 Dog[3]),是否可以使用“make_shared”而不是“new”?此外,是否可以通过 make_shared 方法使用自定义删除功能?
c++11 - 调用“make_shared”没有匹配的函数
每当我尝试使用带有任何参数的构造函数时,我都会收到编译器错误“没有匹配的函数来调用'make_shared'”。因此,例如:
工作正常。但,
给出以下错误:
我直接从这里获取了上面的代码http://www.cplusplus.com/reference/memory/make_shared/ 并且该代码在 cpp.sh 网站上运行良好。我怀疑我的编译器设置有问题。在 Macbook 上的 iTerm 中运行。此外,即使我删除了上面显示的各种 clang 选项,我也会遇到同样的错误。有任何想法吗?我的头文件是否可能需要更新?它是从 2015 年 9 月 4 日开始的。似乎最近足以让 C++11 工作。
c++ - shared_ptr C++ 可能存在内存泄漏
我正在尝试调试由我的代码中的以下行引起的可能的内存泄漏:
我认为一个可能的原因是使用 shared_ptr 而不是更有效的 make_shared。如果是这样,我如何在上述情况下使用 make_shared ?我检查了几篇提到无法使用 make_shared 编写的自定义删除器的帖子。谁能指导我处理这个内存泄漏?
提前致谢。
c++ - shared_ptrs 从函数返回后会自行销毁
我有一个 shared_ptr 向量,但在从函数调用返回后它被销毁,但只有在从填充函数返回并且元素是第一个和第二个 [0],[1] 之后。
我不明白为什么,当我在填充函数中时,我正在检查引用计数,它是 2,在调用之前它是 1,我还没有离开函数 scoop
c++ - 将复制构造函数与 std::make_shared 结合使用
我定义了一个Integer
包含int
值的简单类,调用std::make_shared<Integer>(&ref)
将强制程序使用接受int
. 我是否实现了错误的复制构造函数,或者我的使用有问题std::make_shared
?打电话有什么区别std::make_shared<Integer>(ref)
?另外,为什么不Integer copied_integer(integer);
使用复制构造函数?Integer copied_integer(&integer);
也是不允许的。
这是代码