shared-ptr相关内容

为什么不能从unique_ptr构造weak_ptr?

如果我理解正确,那么weak_ptr不会增加托管对象的引用计数,因此它不表示所有权.它只是让您访问一个对象的生命周期,该对象的生命周期由其他人管理. 所以我真的不明白为什么不能从unique_ptr构造weak_ptr,而只能从shared_ptr构造. 有人可以简要解释一下吗? 解决方案 std::weak_ptr不能使用,除非您通过lock()方式将其转换为std::shared ..
发布时间:2020-07-14 02:17:08 C/C++开发

将shared_ptr分配给weak_ptr

我想将构造的shared_ptr分配给weak_ptr: std::weak_ptr rw = std::shared_ptr(operator new(60), [](void *pi) { operator delete(pi); }); 但是,当我执行rw.expired()时,它显示已过期,表示它为空.有什么建议可以解决我的问题吗? 谢谢. ..
发布时间:2020-07-14 02:17:03 C/C++开发

weak_ptr,make_shared和内存释放

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

将现有值分配给smart-ptrs?

我只是在学习智能指针,而在将变量的现有位置分配给标准库的共享指针时遇到了麻烦. 例如,假设您有一个不知道其值的int x.使用普通的指针,我就做到了 int* ptr; ptr = &x; 我尝试了使用共享指针的尝试, std::tr1::shared_ptr ptr; ptr = std::make_shared (&x) 所以我对如何做到这一点很迷 ..
发布时间:2020-07-11 18:40:55 C/C++开发

用于资源管理的C ++ shared_ptr与unique_ptr

我一直在考虑使用unique_ptr vs shared_ptr vs own_solution.我不赞成后者,因为我几乎肯定会弄错,但是unique_ptr和shared_ptr都存在问题,因为它们都不能准确地捕捉我想要的东西.我想创建一个明确拥有资源的资源管理器,但是我希望该资源管理器也分发对该资源的引用. 如果我在资源管理器中使用unique_ptr并分发原始指针,则它们有可能会在其他 ..
发布时间:2020-07-05 23:34:43 C/C++开发

Shared_ptr和unique_ptr除外

来自 en.cppreference.com std :: unique_ptr的典型用法包括: 提供例外 对处理具有动态生存期的对象的类和函数具有安全性,通过 保证正常退出和通过异常退出均被删除 通过具有动态生存期的唯一拥有对象的所有权进入 函数 从函数中获取具有动态生存期 的唯一拥有对象的所有权 作为可移动容器中的元素类型,例如std :: vector, ..
发布时间:2020-06-11 00:23:43 C/C++开发

在C ++ Visual Studio 2019 Cmake项目中使用shared_ptr和unique_ptr制作多态对象向量有困难

对于一个练习,我需要构建一个多态对象的向量,由于某些原因,共享和唯一ptr在使用它们时都会产生链接错误2019和1120.我没有选择将旧的内存分配方式与“新建"和“删除"一起使用,因此我必须使其工作.我尝试了各种不同的语法选项来执行此操作,但仍然没有运气. *注意: 我们使用Cmake在Visual Studio中将项目绑定在一起 还将对象分为头文件和cpp文件. 这是我现在的对象 ..
发布时间:2020-05-29 00:52:15 其他开发

通过shared_ptr进行dynamic_cast吗?

我有两个类A和B,B继承自A. 如果我有一个确实是B子类型的shared_ptr对象,我该如何执行动态强制转换以访问B的API(请记住我的对象是shared_ptr,而不仅仅是A? 解决方案 如果只想从B调用函数,则可以使用以下之一: std::shared_ptr ap = ...; dynamic_cast(*ap).b_function(); if ( ..
发布时间:2020-05-29 00:40:00 C/C++开发

如何推迟shared_ptr的删除操作?

我在main中创建了sample类的指针.我正在将此指针传递给函数function1().该函数必须使用指针作为共享指针,并使用该指针执行一些操作.在function1()退出期间,由于shared_ptr而调用了sample的析构函数.当我将相同的指针传递给不同的函数时,该指针不再有效,并且程序崩溃. 1.如何延迟function1()中的删除操作(销毁调用)? 2.另一种方法是什么 ..
发布时间:2020-05-28 23:02:35 C/C++开发

是否有一个与shared_from_this等效的weak_ptr?

我有一个我知道将永远归于std::shared_ptr的类.但是,将shared_ptr甚至weak_ptr传递给不需要所有权或生存期保证的函数和方法会产生不必要的开销.为了解决这个问题,我经常将原始指针传递给函数.类本身是从std::enable_shared_from_this继承的,因此,如果函数需要获取指针的所有权,则可以使用该类的方法来获取shared_ptr. 一切正常.但是在某 ..
发布时间:2020-05-28 22:31:00 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++开发

为什么在std :: shared_ptr实现中需要两个指向托管对象的原始指针?

这是cppreference的std::shared_ptr的实现笔记部分的引文,其中提到有两种不同的指针(如粗体所示):可以由get()返回的一个指针,以及将实际数据保存在其中的一个指针.控制块. 在典型的实现中,std::shared_ptr仅包含两个指针: 存储的指针(get()返回的指针) 指向控制块的指针 控制块是一个动态分配的对象,其中包含: 指向托管对象的指 ..
发布时间:2020-05-28 22:06:41 C/C++开发