make-shared相关内容

C++:如何从 make_shared 部分推导出模板参数

为了规避对部分提供的显式模板参数的限制,我嵌入了我想从中推导出类模板参数 (Internal) 到第二个结构 (Container) 的结构. 我想让代码的用户能够创建例如结果类型的共享指针.通过在结构中编写我自己的 create 函数,这工作得很好. #include ///用于部分指定模板参数的容器模板结构容器{///包含类型,其中推导出模板参数.模板 结构内部{显式内部 ..
发布时间:2021-11-17 05:51:30 C/C++开发

构建 shared_ptr 时遇到问题

我是智能指针的新手,我正在努力解决每一个绊脚石. 我有一个结构texture_t: struct texture_t{hash32_t 哈希;uint32_t 宽度;uint32_t 高度;uint32_t 句柄;}; 当我尝试使用此行创建此结构的 shared_ptr 时: auto texture_shared_ptr = std::make_shared(new texture_ ..
发布时间:2021-07-23 20:32:29 C/C++开发

如何阻止使用std :: make_shared< T>

我知道我可以通过将类的 operator new 设为私有来防止自定义类及其后代的普通堆分配,但是有什么方法可以防止库的用户调用 std::自定义类(或其后代)上的:: make_shared ?显然,仅在类中将 operator new 设置为私有并不能阻止它. 请注意,我不想完全阻止以任何方式创建共享指针,因为我打算仍然能够通过调用静态方法来为自定义类生成 std :: shared_p ..
发布时间:2021-04-20 18:56:02 C/C++开发

make_shared()的可调试替换

使用gcc 4.6.2,如果构造函数引发异常,make_shared()会给出无用的回溯(显然是由于重新抛出).我正在使用make_shared()节省一些键入内容,但这是show stopper.我创建了一个替代 make_shrd(),它可以进行正常的回溯.我正在使用gdb 7.3.1. 我担心: make_shared()下不好的回溯是我自己的错 我的替代品make_shrd( ..
发布时间:2021-04-20 18:45:55 C/C++开发

C ++:如何从make_shared中部分推导出模板参数

为了规避对部分提供的显式模板参数的限制,我嵌入了我要从中推断类模板参数( Internal )到第二个结构( Container )的结构. 我想让代码的用户创建例如共享结果类型的指针.通过在结构中编写我自己的 create 函数,效果很好. #include///用于部分指定模板参数的容器模板结构容器{///包含的类型,可推导其模板参数.模板 ..
发布时间:2021-04-09 19:17:36 C/C++开发

尝试制作shared_ptr时std :: make_shared()中出现错误?

(使用Visual Studio 2010)我正在尝试在项目中创建一个现有类的shared_ptr(该类是在std :: shared_ptr存在十年之前编写的)。此类使用非常量指针指向另一个对象,它的空参数构造函数是私有的。 class Foobar { 公众: Foobar(Baz * rBaz); 私人: Foobar(); } 当我尝试为其创建一个sh ..
发布时间:2020-09-27 04:36:18 C/C++开发

如何将Deleter传递给make_shared?

从C ++ 11开始,由于多种原因,开发人员倾向于将智能指针类用于动态生命周期对象。对于这些新的智能指针类,标准甚至建议不要使用 new 这样的运算符,而是建议使用 make_shared 或 make_unique 可以避免某些错误。 如果我们想使用智能指针类,例如 shared_ptr ,我们可以构造一个类似的 shared_ptr p(新int(12)); ..
发布时间:2020-09-27 02:19:58 C/C++开发

weak_ptr,make_shared和内存释放

shared_ptr的控制块在存在至少一个weak_ptr时保持活动状态.如果共享指针是用make_shared创建的,则意味着该对象的整个内存将保持分配状态. (对象本身已被适当地破坏,但是由于对象的控制块和内存是像make_shared一样分配在一个块中的,因此只能将它们一起释放.) 我的理解正确吗? 例如,著名的缓存示例" .对象的内存将永远保持分配状态. 在任何实际情况下 ..
发布时间:2020-07-14 02:15:51 C/C++开发

new和make_shared用于共享指针

我碰到了这篇帖子,其中一篇@kerek SB州的答案 std::shared_ptr p1 = std::make_shared("foo"); std::shared_ptr p2(new Object("foo")); 在您的代码中,第二个变量只是一个裸指针,而不是 完全共享指针. 现在在肉上. make_shared(在实践中) ..
发布时间:2020-05-28 22:15:56 C/C++开发

为什么必须shared_ptr<>分别为控制块和管理对象分配?

这个链接的问题询问 make_shared 函数和 shared_ptr 构造函数是否不同。 / p> 使用make_shared时会发生什么 部分答案是 make_shared 通常会为对象和智能指针控制块在单个分配。 shared_ptr 构造函数使用两个分配。 cppreference 说明构造函数必须这样做,但没有给出任何原因。 为什么?是出于某种原 ..
发布时间:2016-11-06 02:55:54 C/C++开发

boost :: make_shared不是调用(placement)运算符new?

我第一次使用boost :: make_shared创建共享指针指向的对象。主要是因为我们的代码太慢,单个分配真的有助于提高性能。 修复一些内存泄漏“硬手动方式”后,我决定实现一个简单的内存泄漏检测器通过覆盖所有相关类的新运算符,只是为了计数哪些对象仍然活在我们的应用程序中的特定点。我已经实现了几次之前,并惊讶地发现我的代码不再检测到任何对象。 我想我所要做的就是重写“placemen ..
发布时间:2016-10-24 12:48:16 C/C++开发