草庐IT

atomic_shared_ptr

全部标签

c++ - 如何防止为 unique_ptr 删除 px.get()

在boost.org网站上,我看到了一个阻止deletepx.get()forashared_ptr(http://www.boost.org/doc/libs/1_51_0/libs/smart_ptr/sp_techniques.html#preventing_delete)的示例。这是一项很好的技术,我想在C++11中使用std::unique_ptr来应用它,经过一段时间的工具化后,我无法完全理解他们的示例如何使用std::unique_ptr。是否可以防止在std::unique_ptr上调用deletepx.get()?这是来自boost.org网站的代码,展示了如何防止调

c++ - OpenMP:为 'shared' 预先确定 'shared' ?

查看此函数(矩阵vector积):std::vectortimes(std::vector>const&A,std::vectorconst&b,intm,intn){std::vectorc;c.resize(n);inti,j;doublesum;#pragmaompparallelfordefault(none)private(i,j,sum)shared(m,n,A,b,c)for(i=0;i尝试使用OpenMP编译时,编译器失败并显示:Invoking:GCCC++Compilerg++-O0-g3-Wall-c-fmessage-length=0-fopenmp-MMD-M

c++ - shared_ptr 的 dtor 是否需要使用 "deleter"?

It'swidelyknown您可以使用shared_ptr来存储指向不完整类型的指针,只要在构造shared_ptr期间可以删除该指针(具有明确定义的行为).例如,PIMPL技术:structinterface{interface();//out-of-linedefinitionrequired~interface()=default;//publicinlinemember,evenifimplicitlydefinedvoidfoo();private:structimpl;//incompletetypestd::shared_ptrpimpl;//pointertoinco

c++ - atomic_thread_fence(memory_order_seq_cst)是否具有完整内存屏障的语义?

完全/通用内存屏障是指相对于系统其他组件而言,屏障之前指定的所有LOAD和STORE操作似乎都发生在屏障之后指定的所有LOAD和STORE操作之前的情形。根据cppreference,memory_order_seq_cst等于memory_order_acq_rel加上在这样标记的所有操作上的单个总修改顺序。但是据我所知,C++11中的获取或释放围栏都不会强制执行#StoreLoad(存储后加载)排序。释放栅栏要求任何后续的写操作都不能对先前的读/写进行重新排序;获取栅栏要求后续的读/写操作不能与先前的任何读操作重新排序。如果我错了,请纠正我;)举个例子atomicx;atomicy

c++ - unique_ptr : linked list entry deletion

我目前正在考虑借助unique_ptr实现单链表。尽管由于析构函数的递归调用(请参阅Stackoverflowwithunique_ptrlinkedlist)可能会出现堆栈溢出的问题,但我还是遇到了以下问题:假设,我们有以下链表的实现structnode{node(void):val(0),next(nullptr){}intval;std::unique_ptrnext;};并且我们已经根据初始化了我们的列表intmain(intargc,char*argv[]){nodeHEAD;HEAD.val=0;autoptr=&HEAD;for(inti=0;ival=i;ptr->ne

c++ - 使用 shared_ptr 时,我应该只使用一次 shared_ptr 声明还是在我传递它的所有地方都声明 shared_ptr?

使用shared_ptr时,我应该只使用shared_ptr吗?申报一次或申报shared_ptr无论我经过哪里?所以在我新建实例的函数中,我将它包装在shared_ptr中但是当我从函数返回它时,我也可以返回一个shared_ptr或者,使用get()在shared_ptr上,只返回一个普通指针。所以我的问题是,我应该只使用shared_ptr吗?当我新建实例然后传递普通指针或者我应该传递shared_ptr时无处不在? 最佳答案 创建一个shared_ptr不会在它的指针对象上赋予魔法力量。神奇之处在于shared_ptr—及其

c++ - unique_ptr 对象的 getter 和 setter(依赖注入(inject))

我有一个MyClass类,它拥有某个DataProvider类的一个实例,并为此提供了一个getter。为了依赖注入(inject),我更愿意有一个getter和一个setter。此外,DataProvider应包含在std::unique_pointer中:#include#includeclassDataProvider{public:DataProvider(){}virtual~DataProvider(){}/*stuff*/private:/*morestuff*/};classMyClass{public:MyClass(){}virtualinlineconstData

c++ - 包含 shared_ptr 的对象的常量正确性

考虑对象:classObj{public:Obj():val(newint(1)){}int&get(){return*val;}constint&get()const{return*val;}private:std::shared_ptrval;};正如预期的那样,当构造对象并制作拷贝时,它们都可以通过Obj公开的shared_ptr修改相同的值。Objnonconst1;Objnonconst2(nonconst1);nonconst2.get()=2;cout也可以从非const之一复制构造一个constObj对象,这似乎是正确的,因为它允许读取但不允许写入值-正如预期的那样以下

c++ - 如何通过 std::unique_ptr 成员调用其他类的 const 成员函数

在阅读有关向标准库添加const-propagating包装器的提案(文档编号N4388)时,我碰到了论文中给出的示例:#include#includestructA{voidbar()const{std::cout()){}voidfoo()const{std::coutbar();//callsA::bar()(non-const)//const_cast>(m_ptrA)->bar();//howtocalltheA::bar()const?}voidfoo(){std::coutbar();}std::unique_ptrm_ptrA;};intmain(){constBcon

c++ - 为什么 std::shared_ptr<T> = std::unique_ptr<T[]> 编译,而 std::shared_ptr<T[]> = std::unique_ptr<T[]> 不编译?

我使用以下输入命令在Coliru中探索了这个主题:g++-std=c++14-O2-Wall-pedantic-pthreadmain.cpp&&./a.out测试可以查到here,但我已经发布了下面的代码。我用了int在我的示例中,因为它是基本类型。#include#includestructFoo{Foo():a_{0},b_{1},c_{-1},combination_{0.5}{}inta_,b_,c_;doublecombination_;};intmain(){//int//*unManagedArray=newint[16];std::unique_ptruniqueAr