草庐IT

auto_ptr_ref

全部标签

c++ - std::shared_ptr 和 std::experimental::atomic_shared_ptr 有什么区别?

我阅读了followingAntonyWilliams的文章,据我了解,除了std::experimental::atomic_shared_ptr中std::shared_ptr中的原子共享计数之外指向共享对象的实际指针也是原子的?但是当我读到安东尼的书中关于C++Concurrency的lock_free_stack的引用计数版本时在我看来,同样适用于std::shared_ptr,因为应用了std::atomic_load、std::atomic_compare_exchnage_weak等函数到std::shared_ptr的实例。templateclasslock_free_

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# - C# "var"和 C++ "auto"之间的差异

我现在正在学习C++,因为我需要编写一些低级程序。当我了解“auto”关键字时,它让我想起了来自C#的“var”关键字。那么,C#“var”和C++“auto”有什么区别? 最佳答案 在C#中,var关键字仅在函数内部本地起作用:vari=10;//implicitlytyped在C++中自动关键字candeduce不仅可以输入变量,还可以输入函数和模板:autoi=10;autofoo(){//deducedtobeintreturn5;}templateautoadd(Tt,Uu){returnt+u;}从性能的角度来看,aut

c# - C# "var"和 C++ "auto"之间的差异

我现在正在学习C++,因为我需要编写一些低级程序。当我了解“auto”关键字时,它让我想起了来自C#的“var”关键字。那么,C#“var”和C++“auto”有什么区别? 最佳答案 在C#中,var关键字仅在函数内部本地起作用:vari=10;//implicitlytyped在C++中自动关键字candeduce不仅可以输入变量,还可以输入函数和模板:autoi=10;autofoo(){//deducedtobeintreturn5;}templateautoadd(Tt,Uu){returnt+u;}从性能的角度来看,aut

c++ - `auto pp` 和 `auto *ppp` 有什么区别?

intfoo=11;int*p=&foo;autopp=p;auto*ppp=p;cout这个程序将为pp和ppp产生相同的输出,但为什么呢?auto推导出变量应该是int,所以我觉得ppp的声明是对的。但是pp和ppp具有相同的值...输出:0x61fefc0x61fefc 最佳答案 在您展示的特定示例中,没有区别。但想象一下,您稍后会添加两个const限定符,如下所示:constautopp=p;constauto*ppp=p;还是一样吗?原来这和int*constpp=p;//pointerisreadonlyconstint

c++ - `auto pp` 和 `auto *ppp` 有什么区别?

intfoo=11;int*p=&foo;autopp=p;auto*ppp=p;cout这个程序将为pp和ppp产生相同的输出,但为什么呢?auto推导出变量应该是int,所以我觉得ppp的声明是对的。但是pp和ppp具有相同的值...输出:0x61fefc0x61fefc 最佳答案 在您展示的特定示例中,没有区别。但想象一下,您稍后会添加两个const限定符,如下所示:constautopp=p;constauto*ppp=p;还是一样吗?原来这和int*constpp=p;//pointerisreadonlyconstint

c++ - auto main()->int 是什么意思?

我碰巧在一个关于C++11的视频中看到了下面的代码片段,作者在这里使用了automain()->int我不明白这一点。我尝试使用-std=c++11在g++中编译,它可以工作。有人可以向我解释这里发生了什么吗?我尝试使用“automain()->int”进行搜索,但没有找到任何帮助。 最佳答案 C++11为尾随返回类型引入了一种表示法:如果使用auto引入函数声明,则返回类型将在参数和->序列。也就是说,所做的只是声明main()以返回int。尾随返回类型的意义主要在于函数模板,现在可以将函数的参数与decltype()一起使用来确

c++ - auto main()->int 是什么意思?

我碰巧在一个关于C++11的视频中看到了下面的代码片段,作者在这里使用了automain()->int我不明白这一点。我尝试使用-std=c++11在g++中编译,它可以工作。有人可以向我解释这里发生了什么吗?我尝试使用“automain()->int”进行搜索,但没有找到任何帮助。 最佳答案 C++11为尾随返回类型引入了一种表示法:如果使用auto引入函数声明,则返回类型将在参数和->序列。也就是说,所做的只是声明main()以返回int。尾随返回类型的意义主要在于函数模板,现在可以将函数的参数与decltype()一起使用来确

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