草庐IT

gray8_ptr_t

全部标签

c++ - std::unique_ptr<> 作为基于节点的结构中的指针

由于大多数人都喜欢拼图,我将以(拼写错误:))gotw之类的介绍开始这个问题,请注意,如果您不关心它,则可以跳过热身(JG问题)并阅读G问题,因为这是我的“真正的SO问题”。DuringreviewofthecodesamplesprovidedbypotentialnewemployeesyoustumbleduponalinkedlistwhoseimplementationusesmodernC++11feature,anstd::unique_ptr.templatestructNode{Tdata;std::unique_ptr>next;Node(){}Node(const

C++ 11新特性之week_ptr

概述        在C++11标准中,智能指针的引入极大地提升了内存管理的安全性和便利性。除了已经广为人知的shared_ptr和unique_ptr之外,还有一个重要但相对较少被单独提及的智能指针类型——std::weak_ptr。std::weak_ptr是C++11引入的一种弱引用智能指针,它不拥有所指向对象的所有权,而是对shared_ptr持有的对象提供一种非拥有但可观察的访问方式。weak_ptr主要用于打破共享所有权循环引用的问题,防止出现内存泄漏。工作原理        1、不增加引用计数。        当创建一个weak_ptr时,它不会增加其所指向的对象的引用计数。这意

c++ - 使用 shared_ptr 处理不完整类型的 Pimpl 习语

我正在阅读ScottMeyers的EffectiveModernC++,他正在讨论pimpl习语的使用,并使用unique_ptr指向实现类,但存在特殊成员函数的问题(例如析构函数)要求类型完整。这是因为unique_ptr的默认删除器在使用deletep之前静态断言要删除的类型是否完整。因此类的任何特殊成员函数都必须在实现文件中定义(而不是由编译器生成),在实现类定义之后。在章节的最后,他提到如果使用的智能指针是shared_ptr,就不需要在实现文件中定义特殊的成员函数,这源于它支持自定义的方式删除器。引用:Thedifferenceinbehaviorbetweenstd::un

c++ - 在 shared_from_this() 中 boost weak_ptr_cast

我正在使用boost的共享指针,并使用enable_shared_from_this来启用返回指向this的共享指针。代码如下所示:classfoo:publicboost::enable_shared_from_this{boost::shared_ptrget(){returnshared_from_this();}}为什么shared_from_this会抛出weak_ptr_cast异常? 最佳答案 如果您在堆栈上声明了foo,那么就没有其他指向foo的共享指针。例如:voidbar(){foofooby;fooby.get

c++ - 在类 : scoped_ptr or shared_ptr? 中将智能指针作为参数传递

我有一个类在一个公共(public)方法中创建一个对象。该对象是私有(private)的,对类的用户不可见。此方法然后调用同一类中的其他私有(private)方法并将创建的对象作为参数传递:classFoo{...};classA{private:typedefscoped_ptrFooPtr;voidprivateMethod1(FooPtrfooObj);public:voidshowSomethingOnTheScreen(){FooPtrfooObj(newFoo);privateMethod1(fooObj);};};我相信在这种情况下正确的智能指针将是一个scoped_pt

c++ - boost shared_ptr 和 'this'

我有两个具有父子关系的类(客户&订单目录&文件等)我有typedefboost::shared_ptrParentPtr在父类中创建子类的方法我需要子实例有指向它们父实例的指针。classChild{....ParentPtrm_parent;....}我希望它是一个shared_ptr,这样在存在子项时父项不会消失。我还有其他人持有ParentPtrs给父级(Parents的工厂方法返回一个ParentPtr)问题:如何给child一个ParentPtr尝试(1)。在Parent::ChildFactorychild->m_parent.reset(this);这会导致非常糟糕的事情

c++ - 使用重载放置新/删除提升 shared_ptr

我像这样将boostshared_ptr与我自己的内存管理器一起使用(精简示例,我希望其中没有错误):classMemoryManager{public:/**Allocatesomememory.*/inlinevoid*allocate(size_tnbytes){returnmalloc(nbytes);}/**Removememoryagian.*/inlinevoiddeallocate(void*p){free(p);}};MemoryManagerglobalMM;//Newoperatorsinlinevoid*operatornew(size_tnbytes,ogl2

c++ - boost::weak_ptr 过期后的排序顺序?

对于boost::weak_ptroperator被定义,以便它可以在关联容器中使用。我的问题是:几个weak_ptr的排序顺序是?即使其中一些对象的引用计数变为零,对象是否稳定?这不会与std::set这样的容器混淆吗??例子:usingnamespaceboost;shared_ptrsptrA1(newA);weak_ptrwptrA1=sptrA1;weak_ptrwptrA2;{//beginScope1shared_ptrsptrA2(newA);wptrA2=sptrA2;assert(wptrA1如果断言#1为真,断言#2是否始终为真?是wptrA2在范围1之前和之后处

c++ - 返回 vector<Foo> 或 shared_ptr<vector<Foo>>?

在一个函数中,哪个“return”更合适?一个。vector?B.shared_ptr>?换句话说,哪个文案不那么重,你会怎么做,为什么? 最佳答案 我想返回shared_ptr>很少有用。如果有几个对象可以保存它们可以操纵的共享vector,我只会这样做。对我来说,这表明存在设计缺陷。更好的选择可能是通过const引用返回。这避免了(可能很昂贵的)复制操作,但不允许访问者更改vector。如果您要返回本地std::vector您也可以通过参数返回它。如果真要回shared_ptr>,考虑是否shared_ptr>会完成这项工作(载

c++ - 如果我将 std::shared_ptr 重置为自身会发生什么

以下程序因错误的glibcdoublefree错误而崩溃:#include#includeclassfoo{public:foo(){std::cout();std::cout由此我得到以下输出(后跟glibc错误):fooconstructedBeforeresetfoodestructedAfterresetfoodestructed很明显,在这种情况下,对象被销毁了两次。一次通过重置,一次通过std::shared_ptr超出范围。这实际上是我所期望的。关于cppreference但是我找到了以下文本(位于http://en.cppreference.com/w/cpp/memo