草庐IT

gray8_ptr_t

全部标签

来自 std::cout 的 C++11 std::shared_ptr<std::ostream>

我在存储std::cout时遇到问题在std::shared_ptr.因为这显然不应该这样做:std::shared_ptrp_cout(&std::cout);这甚至是不可能的,因为不可能复制std::ostream:std::shared_ptrp_cout=std::make_shared(std::cout);有人知道合法的解决方法吗? 最佳答案 您的要求很奇怪,但您当然可以存储指向std::ostream的指针在shared_ptr如果您采取适当的处置措施:例如:std::shared_ptr(&std::cout,[](

c++ - `std::optional` 比 `std::shared_ptr` 和 `std::unique_ptr` 有什么优势?

std::optional的推理是madebysaying它可能包含也可能不包含值。因此,如果我们不需要它,它可以节省我们构建一个可能很大的对象的努力。Forexample,这里的工厂,如果不满足某些条件,将不会构造对象:#include#include#includestd::optionalcreate(boolb){if(b)return"Godzilla";//stringisconstructedelsereturn{};//noconstructionofthestringrequired}但是这和这个有什么不同:std::shared_ptrcreate(boolb){i

c++ - boost Shared_Ptr 分配

为什么我不能这样做?boost::shared_ptrnext;voidQueuList::SetNextPtr(QueuList*Next){boost::mutexmtx;boost::mutex::scoped_locklock(mtx);{//scopeoflock//if(next==NULL)//isthisneededonashared_ptr??next=Next;//WhycanInotassignarawptrtoashared_ptr????}我应该怎么做呢??编辑:当正确分配下一个变量时调用此方法,当QueuList对象由于某种原因被销毁时它仍然会导致错误。我得

c++ - 如何对 unique_ptr 的 vector 进行排序?

我声明了一个vector如下:vector>Workers.Worker是具有私有(private)字段的基类name它有两个派生类:Builder和Driver.我添加到WorkersBuilder的vector对象和Driver然后我想按name对vector进行排序使用#include像这样:sort(Workers.begin(),Workers.end(),cmp_by_name);boolcmp_by_name(constWorker&a,constWorker&b){returna.getName()但是VS编译器说:Error1errorC2664:'bool(cons

c++ - 是否有与 shared_from_this 等效的 weak_ptr?

我有一个类,我知道它将永远属于std::shared_ptr。然而,将shared_ptr甚至weak_ptr传递给不需要所有权或生命周期保证的函数和方法会产生不必要的开销。为了解决这个问题,我经常将原始指针传递给函数。该类本身继承自std::enable_shared_from_this,因此如果函数需要获取指针的所有权,它可以使用该类的方法来获取shared_ptr。一切都很顺利。然而,有些情况下我真的不想从原始指针创建一个shared_ptr,我想要的是一个weak_ptr。根据我对std::shared_ptr的通常实现的理解,它有两个用作引用计数器的原子变量;一个用于shar

c++ - 将 shared_ptr 转换为 auto_ptr?

我需要在我的代码中从shared_ptr获取auto_ptr。我可以进行反向操作——将auto_ptr转换为shared_ptr,因为shared_ptr具有这样的构造函数:templateexplicitshared_ptr(std::auto_ptr&r);我可以将shared_ptr转换为auto_ptr吗?还是设计上不可能? 最佳答案 这在设计上是不可能的,因为该对象可能与其他共享指针共享,因此将其“提取”到auto_ptr可能会导致删除引用的对象。出于同样的原因,shared_ptr没有像auto_ptr那样的“relea

c++ - 单例模式和 std::unique_ptr

std::unique_ptr唯一地控制它指向的对象,因此不使用引用计数。单例确保只能使用引用计数创建一个对象。std::unique_ptr会和单例一样执行吗? 最佳答案 单例确保一种类型只有一个实例。unique_ptr确保只有一个智能指针指向任何实例。 关于c++-单例模式和std::unique_ptr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15906509/

c++ - boost::smart_ptr 可以用在 std 容器中吗?

scoped_ptr、shared_ptr等boost::smart_ptr可以用在std::map等std容器中吗?classSomeClass{std::map>a_map;};作为boost::smart_ptrcanbeusedforpolymorphism,在这种情况下也是如此吗?容器的销毁会触发子类的正确销毁吗? 最佳答案 scoped_ptr不能在标准容器中使用,因为它不能被复制(这是容器接口(interface)所要求的)。但是,可以使用shared_ptr。如果您不能使用C++11而您已经在使用boost,请考虑p

c++ - 为什么要用 make_unique 调用来初始化 unique_ptr?

取自:http://herbsutter.com/2013/05/22/gotw-5-solution-overriding-virtual-functions/为什么要写:autopb=unique_ptr{make_unique()};不仅仅是:autopb=make_unique();我唯一的猜测是,如果我们想要auto,我们需要帮助它推断出正确的类型(这里是base)。如果是这样,那么对我来说这将是一个值得怀疑的优点..键入auto然后在=的右侧键入大量初始化..我错过了什么? 最佳答案 嗯,重点是第一个选项使pb一个uni

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

我一直在考虑使用unique_ptr与shared_ptr与own_solution。我对后者打了折扣,因为我几乎肯定会弄错,但我对unique_ptr和shared_ptr都有问题,因为它们都不能准确捕获我想要的内容。我想创建一个明确拥有资源的资源管理器,但我希望资源管理器也分发对该资源的引用。如果我在资源管理器中使用unique_ptr并分发原始指针,则它们有可能逃逸到其他地方(尽管我想这会违反类“契约”)。如果我使用shared_ptr并分发weak_ptr,没有什么可以阻止调用者将weak_ptr转换为shared_ptr并且存储它,从而可能创建一个循环或更糟的是,资源在资源管