草庐IT

atomic_shared_ptr

全部标签

c++ - 如何制作 std::weak_ptr 的 c++11 std::unordered_set

我有一个这样的集合:set,owner_less>>setName;它工作正常。但我想将其更改为无序集。但是,当我这样做时,我得到了大约六页错误。有什么想法吗?在查看所有页面的错误消息后,我找到了可能有帮助的行。/usr/include/c++/4.7/bits/functional_hash.h:60:7:error:staticassertionfailed:std::hashisnotspecializedforthistype/usr/include/c++/4.7/bits/stl_function.h:Ininstantiationof‘boolstd::equal_to:

c++ - 使用 std::unique_ptr 的 double (二维)数组

我有一个由指向指针的指针分配的double组。//pointertopointerint**x=newint*[5];//allocationfor(i=0;i我正在尝试使用unique_ptr来做到这一点:std::unique_ptr[]>a(newstd::unique_ptr[5]);for(i=0;i但一直收到错误消息说没有operator=匹配这些操作数。我在这里做错了什么? 最佳答案 您不能分配int*到std::unique_ptr,这就是你的错误的原因。正确的代码是a[i]=std::unique_ptr(newi

c++ - get() 不会破坏 std::unique_ptr 背后的想法吗?

示例代码:#include#includeintmain(){std::unique_ptrintPtr{newint(3)};int*myPtr=intPtr.get();*myPtr=4;std::cout这不会破坏std::unique_ptr背后的全部目的吗?为什么允许这样做?编辑:我认为std::unique_ptr背后的全部目的是拥有一个对象的唯一所有权。但是这个例子,可以通过另一个指针来修改对象。这不会破坏std::unique_ptr的目的吗? 最佳答案 同时Smartpointers管理被指向对象的生命周期,访问底

C++:可以在构造函数中初始化 boost::scoped_ptr 吗?

boost::scoped_ptr类型的类成员可以在类的构造函数中初始化吗?怎么样?(不在初始化列表中) 最佳答案 是的。你可以使用reset()成员函数。classfoo{public:foo(){p.reset(newbar());}private:boost::scoped_ptrp;}; 关于C++:可以在构造函数中初始化boost::scoped_ptr吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverf

c++ - unique_ptr 运算符=

std::unique_ptrptr;ptr=newint[3];//errorerrorC2679:binary'=':nooperatorfoundwhichtakesaright-handoperandoftype'int*'(orthereisnoacceptableconversion)为什么不编译?如何将native指针附加到现有的unique_ptr实例? 最佳答案 首先,如果你需要一个独特的数组,就制作它std::unique_ptrptr;//^^^^^这允许智能指针正确使用delete[]来释放指针,并定义ope

c++ - `std::make_shared<POD>()` 值是否初始化我的 POD?

是否std::make_shared()值初始化我的POD?如果是,这是标准保证的吗?如果不是(正如我怀疑的那样),有没有办法做到这一点?我猜std::make_shared(POD())会做,但这是我应该做的吗? 最佳答案 是的,它是值初始化的,这是由标准保证的:§20.7.2.2.6,2:(关于make_shared)Effects:AllocatesmemorysuitableforanobjectoftypeTandconstructsanobjectinthatmemoryviatheplacementnewexpress

c++ - 为什么标准库不以无锁方式为 8 字节以下的结构实现 std::atomic?

假设架构可以以无锁方式支持std::atomic的8字节标量。为什么标准库不为小于8字节的结构提供类似的特化?这种std::atomic特化的简单实现可以将结构序列化/反序列化(使用std::memcpy)到等效的std::uintx_t中x是结构的宽度(以位为单位)(四舍五入到最接近的大于或等于结构宽度的2的幂)。这将被很好地定义,因为std::atomic要求这些结构可以简单地复制。例如。https://godbolt.org/z/sxSeId,这里的Something只有3个字节,但是实现调用了__atomic_load和__atomic_exchange,两者都使用了锁表。

c++ - 为什么 std::atomic_is_lock_free 不是静态 constexpr?

我很困惑。实现怎么可能只在运行时知道类型是否是原子的? 最佳答案 编译器可能不知道代码将在哪个CPU上运行,并且CPU的无锁能力可能不同。例如,CPU可能不支持对long类型的原子操作(因此可能需要锁),但如果系统只有一个内核,它们可能会自动成为原子操作,因为它们不能被中断并且没有其他核心可以与之竞争(因此不需要任何特殊的东西并且类型是无锁的)。 关于c++-为什么std::atomic_is_lock_free不是静态constexpr?,我们在StackOverflow上找到一个类似

C++ shared_mutex 实现

boost::shared_mutex或std::shared_mutex(C++17)可用于单个写入器、多个读取器访问。作为一项教育练习,我整理了一个使用自旋锁并具有其他限制(例如公平策略)的简单实现,但显然不打算在实际应用程序中使用。这个想法是互斥锁保持一个引用计数,如果没有线程持有锁,该引用计数为零。如果>0,则该值表示具有访问权限的读者数。如果为-1,则表示单个作者具有访问权限。这是没有数据竞争的正确实现(特别是使用的最小内存排序)吗?#includeclassmy_shared_mutex{std::atomicrefcount{0};public:voidlock()//w

Android NDK 构建 - 包括 LOCAL_SHARED_LIBRARIES?

我在AndroidNDK下构建项目时遇到问题。很可能是由于未包含适当的共享/静态库。我添加了-lsomeLib的那些,但似乎没有包含LOCAL_SHARED_LIBRARIES的那些......我的Android.mk包含以下内容LOCAL_SHARED_LIBRARIES+=libutilslibmedialibzlibbinderndk-build实际上在哪里寻找这些库?如果我不包括-lutils-lmedia-lz-lbinder,我什至无法得到链接器错误。我有一种感觉,只包括-LsomeDir和-lsomeLib并不是添加它们的正确方法。这是完整的Android.mk。LOCA