草庐IT

atomic_shared_ptr

全部标签

c++ - std::shared_ptr 中的最大引用计数是多少?如果你试图超过它会发生什么?

如果我们假设std::shared_ptr存储引用计数(我意识到标准不需要,但我不知道有任何实现不需要),那么引用计数有位数有限,这意味着支持的引用数量有上限。这就引出了两个问题:这个最大值是多少?如果你试图超过它会发生什么(例如,通过复制一个引用具有最大引用计数的对象的std::shared_ptr)?请注意,std::shared_ptr的复制构造函数声明为noexcept。该标准是否阐明了这些问题中的任何一个?常见的实现如何,例如gcc、MSVC、Boost? 最佳答案 我们可以从shared_ptr::use_count()

c++ - std::shared_ptr 中的最大引用计数是多少?如果你试图超过它会发生什么?

如果我们假设std::shared_ptr存储引用计数(我意识到标准不需要,但我不知道有任何实现不需要),那么引用计数有位数有限,这意味着支持的引用数量有上限。这就引出了两个问题:这个最大值是多少?如果你试图超过它会发生什么(例如,通过复制一个引用具有最大引用计数的对象的std::shared_ptr)?请注意,std::shared_ptr的复制构造函数声明为noexcept。该标准是否阐明了这些问题中的任何一个?常见的实现如何,例如gcc、MSVC、Boost? 最佳答案 我们可以从shared_ptr::use_count()

c++ - 为什么允许 shared_ptr<T[N]>?

Thisanswer引用N4082,这表明即将对std::shared_ptr进行的更改将允许T[]和T[N]变种:Unliketheunique_ptrpartialspecializationforarrays,bothshared_ptrandshared_ptrwillbevalidandbothwillresultindelete[]beingcalledonthemanagedarrayofobjects.templateexplicitshared_ptr(Y*p);Requires:Yshallbeacompletetype.Theexpressiondelete[]p

c++ - 为什么允许 shared_ptr<T[N]>?

Thisanswer引用N4082,这表明即将对std::shared_ptr进行的更改将允许T[]和T[N]变种:Unliketheunique_ptrpartialspecializationforarrays,bothshared_ptrandshared_ptrwillbevalidandbothwillresultindelete[]beingcalledonthemanagedarrayofobjects.templateexplicitshared_ptr(Y*p);Requires:Yshallbeacompletetype.Theexpressiondelete[]p

c++ - 在 dll 接口(interface)中使用 shared_ptr

我的dll中有一个抽象类。classIBase{protected:virtual~IBase()=0;public:virtualvoidf()=0;};我想在加载dll的exe文件中获取IBase。第一种方法是创建以下函数IBase*CreateInterface();并在IBase中添加虚函数Release()。第二种方法是创建另一个函数boost::shared_ptrCreateInterface();并且不需要Release()函数。问题。1)在第二种情况中,在dll(不是在exe文件中)调用析构函数和内存释放是真的吗?2)如果exe文件和dll使用不同的编译器(或不同的设

c++ - 在 dll 接口(interface)中使用 shared_ptr

我的dll中有一个抽象类。classIBase{protected:virtual~IBase()=0;public:virtualvoidf()=0;};我想在加载dll的exe文件中获取IBase。第一种方法是创建以下函数IBase*CreateInterface();并在IBase中添加虚函数Release()。第二种方法是创建另一个函数boost::shared_ptrCreateInterface();并且不需要Release()函数。问题。1)在第二种情况中,在dll(不是在exe文件中)调用析构函数和内存释放是真的吗?2)如果exe文件和dll使用不同的编译器(或不同的设

c++ - "atom"数据类型是什么?

我在Win32api中遇到了ATOM类型在AcrobatAPI中还有ASAtom.据我所知,原子是哈希表的键,通常是字符串,以实现快速查找并在应用程序之间共享数据。这是正确的吗?原子类型的词源是什么?编辑经过大量搜索后,我注意到Prolog使用原子,所以这个词一定有一些起源。它似乎用于引用任何单个数据。 最佳答案 ATOM是一个16位Windows类句柄原语。它的值对用户模式完全不透明。它不是指针或索引。typedef无符号短ATOM; 关于c++-"atom"数据类型是什么?,我们在S

c++ - "atom"数据类型是什么?

我在Win32api中遇到了ATOM类型在AcrobatAPI中还有ASAtom.据我所知,原子是哈希表的键,通常是字符串,以实现快速查找并在应用程序之间共享数据。这是正确的吗?原子类型的词源是什么?编辑经过大量搜索后,我注意到Prolog使用原子,所以这个词一定有一些起源。它似乎用于引用任何单个数据。 最佳答案 ATOM是一个16位Windows类句柄原语。它的值对用户模式完全不透明。它不是指针或索引。typedef无符号短ATOM; 关于c++-"atom"数据类型是什么?,我们在S

c++ - unique_ptr 与 shared_ptr 中的删除器类型

这个问题在这里已经有了答案:Whydoesunique_ptrtaketwotemplateparameterswhenshared_ptronlytakesone?(2个回答)关闭7年前。当我发现标准以两种完全不同的方式定义了std::unique_ptr和std::shared_ptr时,我觉得这非常奇怪可能拥有。这是来自cppreference::unique_ptr的声明和cppreference::shared_ptr:template>classunique_ptr;templateclassshared_ptr;如您所见,unique_ptr将Deleter对象的类型“保

c++ - unique_ptr 与 shared_ptr 中的删除器类型

这个问题在这里已经有了答案:Whydoesunique_ptrtaketwotemplateparameterswhenshared_ptronlytakesone?(2个回答)关闭7年前。当我发现标准以两种完全不同的方式定义了std::unique_ptr和std::shared_ptr时,我觉得这非常奇怪可能拥有。这是来自cppreference::unique_ptr的声明和cppreference::shared_ptr:template>classunique_ptr;templateclassshared_ptr;如您所见,unique_ptr将Deleter对象的类型“保