shared-ptr相关内容

传递 shared_ptr作为 shared_ptr

将派生类型的 shared_ptr 传递给采用基类型 shared_ptr 的函数的最佳方法是什么? 我通常通过引用传递 shared_ptr 以避免不必要的复制: int foo(const shared_ptr& ptr); 但是如果我尝试做类似的事情,这将不起作用 int foo(const shared_ptr& ptr);...shared_ptrbar = make_sha ..
发布时间:2021-12-31 21:41:20 C/C++开发

std::shared_ptr 异常安全

我刚刚意识到阅读这个页面,std::shared_ptr 带有单个指针参数不是 noexcept. 因此以下代码可能存在内存泄漏: std::shared_ptrp3(新整数); 原因是可能发生两次分配: 调用构造函数之前的第一个 shared_ptr 构造函数中的第二个(例如 VS 2012 中发生的情况) 这里有两个问题: 如果第二次分配抛出异常,第一次的内存泄漏 ..
发布时间:2021-12-31 08:07:50 C/C++开发

引用计数智能指针的引用计数是如何工作的?

换句话说,实现如何跟踪计数? 是否有一个类似地图的对象可以被所有 shared_ptr 实例访问,其键是指针的地址,值是引用的数量?如果我必须实现一个 shared_ptr,这是我想到的第一个想法. 在这些引用计数智能指针的情况下,是否有可能发生内存泄漏?如果是这样,我该如何避免它们? 解决方案 我见过两种不同的非侵入式方法来解决这个问题: 智能指针分配一个小的内存块来包 ..

如何有意删除 boost::shared_ptr?

我有很多 boost::shared_ptr 对象,并且在某些时候我有意要删除其中一些以释放一些内存.(那时我知道我将不再需要指向的 MyClass 对象.)我该怎么做? 我想你不能只用我用 get() 得到的原始指针调用 delete(). 我在 boost::shared_ptr 中看到了一个函数 get_deleter(shared_ptr const & ..
发布时间:2021-12-24 15:47:40 C/C++开发

如何初始化作为类成员的 shared_ptr?

我不确定初始化作为类成员的 shared_ptr 的好方法.你能告诉我,我在C::foo()中选择的方式是否合适,或者有更好的解决方案吗? A 类{上市:一个();};B级{上市:B(A* pa);};C级{boost::shared_ptr嘛;boost::shared_ptr兆欧;无效的 foo();};void C::foo(){A* pa = 新 A;mA = boost::shared ..
发布时间:2021-12-24 15:46:46 C/C++开发

您对 shared_ptr 进行 typedef 的约定是什么?

我正在为 boost::shared_ptr 模板转换 typedef 的命名约定.例如: typedef boost::shared_ptrFooPtr; 在确定约定之前,我想看看其他人使用什么.你的约定是什么? 编辑: 对于那些将 typedef 嵌套在 Foo 中的人来说,Foo 现在“知道"了,难道你不会感到困扰吗?它将如何传递?它似乎打破了封装.这个怎么样: class ..
发布时间:2021-12-24 15:44:44 C/C++开发

使用 make_shared 创建 shared_ptr 有什么缺点吗

使用 make_shared() 代替 shared_ptr(new T) 有什么缺点吗. Boost 文档 声明 有来自的重复请求工厂函数的用户创建一个给定类型的对象并返回一个 shared_ptr 给它.除了方便又时尚,这样的功能也是异常安全的相当快,因为​​它可以使用两者的单一分配对象及其对应的控件块,消除了一个重要的shared_ptr 的部分构造高架.这消除了其中之一主要效率 ..
发布时间:2021-12-24 15:44:30 C/C++开发

带有 boost::shared_ptr 的 NULL 指针?

什么是等价于以下内容: std::vectorvec;vec.push_back(NULL); 什么时候处理boost::shared_ptr?是下面的代码吗? std::vector>vec;vec.push_back(boost::shared_ptr()); 注意:我可能会推回很多这样的对象.我应该在某处声明一个全局静态 nullPtr 对象吗?这样就只需要构建其中一个: boos ..
发布时间:2021-12-24 15:44:22 C/C++开发

`const shared_ptr`和`shared_ptr`之间的区别?

我正在为 C++ 中的共享指针编写一个访问器方法,它是这样的: class Foo {上市:return_type getBar() const {返回 m_bar;}私人的:boost::shared_ptrm_bar;} 所以为了支持 getBar() 的常量性,返回类型应该是一个 boost::shared_ptr 以防止修改 Bar> 它指向.我的猜测是 shared_ptr 是我想要 ..
发布时间:2021-12-24 15:43:18 C/C++开发

C++11 中的 intrusive_ptr

C++11 是否具有与 boost::intrusive_ptr 等效的东西? 我的问题是我的 C++ 代码有一个 C 风格的界面.接口的两边都可以使用C++,但是出于兼容性的考虑,需要暴露C接口.我不能使用 std::shared_ptr 因为我必须通过两个(或更多)智能指针来管理对象.我无法找到类似 boost::intrusive_ptr 的解决方案. 解决方案 c++11 ..
发布时间:2021-12-24 15:30:01 C/C++开发

为现有变量创建一个 boost::shared_ptr

我有一个现有的变量,例如 int a = 3; 我现在如何创建一个 boost::shared_ptr 到 a?例如: boost::shared_ptra_ptr = &a;//这不起作用 解决方案 尽管您应该在变量创建时将其放入托管指针中,以便从现有指针执行此操作. int *a=new int;boost::shared_ptr;a_ptr(a); 也就是说你绝对不想将堆栈变量 ..
发布时间:2021-12-24 15:29:28 C/C++开发

boost::shared_ptr 和 std::shared_ptr 的同居

我想在某个时候使用 boost::log,但我不能将 std::shared_ptr 作为参数传递,因为编译器 (VS2010) 无法转换将其转换为 boost::shared_ptr. 我真的不喜欢他们彼此陌生的事实. 是否有一种安全透明的方式将一种转换为另一种,以免它们相互绊倒? 我不认为它与这个问题重复表示两者是相同的. 解决方案 你可以这样做: template ..
发布时间:2021-12-24 15:27:32 C/C++开发

boost::serialization 如何与 C++11 中的 std::shared_ptr 一起使用?

我知道有一个Boost模块序列化的boost::shared_ptr,但我找不到任何东西对于 std::shared_ptr. 另外,我不知道如何轻松实现它.恐怕下面的代码 命名空间提升{命名空间序列化{模板内联无效序列化(存档 & ar,std::shared_ptr &t,const unsigned int 版本){if(Archive::is_loading::value) ..
发布时间:2021-12-24 15:21:24 C/C++开发

从 boost::shared_ptr 到 std::shared_ptr 的转换?

我有一个库,它在内部使用 Boost 的 shared_ptr 版本,并且只公开那些.对于我的应用程序,我想尽可能使用 std::shared_ptr .遗憾的是,这两种类型之间没有直接转换,因为引用计数的内容取决于实现. 有没有办法让 boost::shared_ptr 和 std::shared_ptr 共享同一个引用计数对象?或者至少从 Boost 版本中窃取 ref-count 而只 ..
发布时间:2021-12-24 15:14:31 C/C++开发

shared_from_this 导致 bad_weak_ptr

我正在尝试在 asio 中保留已连接客户端的列表.我已经改编了文档中的聊天服务器示例 (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/example/cpp03/chat/chat_server.cpp)这是我结束的重要部分与: #include #include #include #include ..
发布时间:2021-12-24 15:12:13 C/C++开发

从 shared_ptr 中分离一个指针?

可能的重复: 如何从 boost::shared_ptr 释放指针? 我的接口的一个函数返回一个指向对象的指针.用户应该拥有该对象的所有权.我不想返回 Boost.shared_ptr,因为我不想强迫客户端使用 boost.然而,在内部,我想将指针存储在 shared_ptr 中以防止出现异常等情况下的内存泄漏.似乎无法将指针与共享指针分离.这里有什么想法吗? 解决方案 你要找的是 ..
发布时间:2021-12-24 15:09:20 C/C++开发

shared_ptr 在哪里?

经过几个小时试图找到 shared_ptr 的位置后,我现在非常沮丧.我看到的示例都没有显示完整的代码以包含 shared_ptr (和工作)的标题.简单地说明 std、tr1 和 根本没有帮助!我已经下载了提升,但仍然没有出现!有人能帮我确切地告诉我在哪里可以找到它吗? 谢谢你让我发泄我的不满! 编辑:我看到我的标题已更改.对于那个很抱歉.所以...也是因为我不清楚 shared_p ..
发布时间:2021-12-24 15:07:53 C/C++开发

如何从 boost::shared_ptr 释放指针?

boost::shared_ptr 可以释放存储的指针而不删除它吗? 我可以看到文档中不存在发布功能,在常见问题解答中也解释了为什么它不提供发布功能,例如不能在非唯一指针上进行发布.我的指针是独一无二的.我怎样才能释放我的指针?或者使用哪个 boost 智能指针类可以让我释放指针?我希望你不会说使用 auto_ptr :) 解决方案 您需要使用一个删除器,您可以请求不删除底层指针. ..
发布时间:2021-12-24 15:06:57 C/C++开发