草庐IT

pimpl_ptr

全部标签

c++ - vector<shared_ptr<T>> 和 vector<shared_ptr<const T>> 之间的高效转换

我有一个类:classX{vector>v_;public:vector>getTs(){returnv_;}};它有一个vector的shared_ptr类型T.出于某种原因,它需要公开一个方法来返回这个vector。但是,我不想修改vector的内容,也不想指向对象。所以我需要返回一个vector的shared_ptr.我的问题是,有什么有效的方法可以做到这一点吗?如果我简单地返回它,它可以工作,但它需要重建一个vector,这有点昂贵。谢谢。 最佳答案 你不能直接这样做-但你可以在你的容器上定义“View”,让你做一些非常相似

c++ - 函数中auto_ptr的返回值

我遇到过这样的代码。MyClassMyClass::get_information(constsome_datastructure*record){auto_ptrvariable(newMyClass());variable->set_article_id(record->article_id);return*variable.get();}我知道这会返回一个(拷贝?)MyClass类型的对象。最初,我认为它正在返回对我来说没有意义的auto_ptr对象(?)因为我认为auto_ptr对象在超出范围时会被销毁。无论如何,上面的代码可以吗?对象*variable.get()在函数返回时

c++ - 为什么这个 time_zone_ptr 示例不包含内存泄漏?

我正在阅读boostDateTime库here,其中包含许多示例,例如:time_zone_ptrzone(newposix_time_zone("MST-07"));我很好奇为什么使用关键字“new”不会导致内存泄漏?我调查了boost源代码,注意到它有两个不同版本的构造函数,一个使用shared_ptr,另一个使用weak_ptr。有人可以解释这些是如何工作的,以及为什么上面的行可以安全编写? 最佳答案 time_zone_ptr只是boost::shared_ptr的别名.这是一个智能指针,它获取动态分配对象的所有权,从构造它

c++ - 在顶层使用 shared_ptr 而不是 scoped_ptr 有什么优势吗?

我的团队对于指针容器在特定上下文中的使用存在一些分歧。请考虑:intmain(){//Toplevel.Thisisanimportantfacttothecontext//i.e.thatthefollowinginstanceisatthislevel//sothatitsmembersareessentiallyatprogramscope.MainClassmainClass;mainClass.run();}//AinstanceofaclassderivedfromBufferdoessomethingverycomplex//(ithasvarioushandlestor

c++ - 具有多态类型的 unique_ptr 未被删除

我有一个使用基类派生类型存储的unique_ptrvectorstd::unique_ptr>>decisionVariables;其中Variable是父类(superclass),派生类型是Route类。我的问题是,当包含decisionVariables的类被删除时,路由实例似乎没有被删除。路由来源于变量:#ifndef__VARIABLE__#define__VARIABLE__/***Interfacefordecisionvariables.*/#include#include#includeclassVariable{public:/***Returnsanindepen

c++ - 基于模板参数是否为 shared_ptr 的函数特化

我正在尝试检测类型是否为shared_ptr如果是,则分派(dispatch)到特定函数模板或覆盖。这是我实际尝试的简化版本:#include#include#includetemplatestructis_shared_ptr:std::false_type{};templatestructis_shared_ptr>:std::true_type{};classFoo{};typedefstd::shared_ptrSharedFoo;templatevoidgetValue();template::value>::type=0>voidgetValue(){printf("sha

c++ - 使用 make_shared<std::thread> 创建 shared_ptr<std::thread> 的实例

考虑以下代码:classA{....shared_ptrmThread;voidStep();voidLaunchTrhead();}voidA::LaunchThread(){...mThread=make_shared(Step);//Thislinegivesanerror...}voidA::Step(){...}我正在尝试初始化共享指针mThread以便它调用函数Step。但是,编译器给我错误“类型引用的无效初始化...来自类型‘未解析的重载函数类型’的表达式”。显然我在做一些愚蠢的事情,但我不能指责它。有人可以帮忙吗?提前致谢! 最佳答案

c++ - 使用 BOOST shared_array 而不是 shared_ptr 的好处

我想在我的应用程序中使用BOOST智能指针进行内存管理。但是我不确定我应该为动态分配的数组shared_ptr或shared_array使用哪个智能指针。根据BOOST文档从Boost版本1.53开始,shared_ptr可用于保存指向动态分配数组的指针。所以我现在只是想知道用户应该出于什么目的使用shared_array而不是shared_ptr。 最佳答案 在boost1.53之前,boost::shared_ptr用于指向单个对象的指针。1.53之后,由于boost::shared_ptr可以用于数组类型,我觉得和boost:

C++ - shared_ptr<vector<T>> 与 vector<shared_ptr<T>>

我看到很多人使用vector>的案例.您何时以及为何使用shared_ptr>反而?对我来说,后者似乎在性能和内存使用方面都更有效率。在整个应用程序中共享单个对象vector是否错误?谢谢 最佳答案 此用途:vector>将允许您传递T类型的实例从这个vector到代码的其他部分,不用担心它们不会被释放。即使您的vector将不再存在。shared_ptr>另一方面只保护vector,其元素类型为T没有针对内存泄漏的保护。我在这里假设T是指针类型,如果T是非指针,那么你当然不会在这里造成内存泄漏的问题。好吧,有人可以制作T=shar

c++ - 唯一 ptr 初始化断言失败

这导致我的程序断言失败:inta=5;std::unique_ptrintptr(&a);错误File:f:\dd\vctools\crt\crtw32\misc\dbgdel.cppLine:32Expression:_BLOCK_TYPE_IS_VALID(pHead>nBlockUse)当我使用“new”或“=make_unique(..)”初始化它时效果很好,但我很想知道为什么我不能通过提供现有变量的地址来初始化它。 最佳答案 变量a在栈上,如果你将它绑定(bind)到一个unique_ptr,当unique_ptr超出作用