草庐IT

Shared_Ptr

全部标签

c++ - boost async_* 函数和 shared_ptr 的

我经常在代码中看到这种模式,将shared_from_this作为第一个参数绑定(bind)到成员函数并使用async_*函数调度结果。这是另一个问题的示例:voidConnection::Receive(){boost::asio::async_read(socket_,boost::asio::buffer(this->read_buffer_),boost::bind(&Connection::handle_Receive,shared_from_this(),boost::asio::placeholders::error,boost::asio::placeholders::

c++ - boost async_* 函数和 shared_ptr 的

我经常在代码中看到这种模式,将shared_from_this作为第一个参数绑定(bind)到成员函数并使用async_*函数调度结果。这是另一个问题的示例:voidConnection::Receive(){boost::asio::async_read(socket_,boost::asio::buffer(this->read_buffer_),boost::bind(&Connection::handle_Receive,shared_from_this(),boost::asio::placeholders::error,boost::asio::placeholders::

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::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++ - 共享 void 指针。为什么这行得通?

为了解决我的应用程序中一个非常特殊的问题,我需要一个指向已分配数据的共享指针,但对于外部世界,底层数据类型应该保持隐藏。我可以通过创建我所有其他类都继承的某种Root类来解决这个问题,并在这个Root类上使用shared_ptr,如下所示:std::shared_ptr但是:我不希望我的所有类都从这个Root类继承,只是为了能够拥有这个共享指针有时我想返回一个指向std::vector或std::list或std::set的共享指针...显然不是从我的Root类继承的很奇怪,您似乎可以在void上创建一个shared_ptr并且这似乎可以正常工作,如下例所示:classX{public

c++ - 共享 void 指针。为什么这行得通?

为了解决我的应用程序中一个非常特殊的问题,我需要一个指向已分配数据的共享指针,但对于外部世界,底层数据类型应该保持隐藏。我可以通过创建我所有其他类都继承的某种Root类来解决这个问题,并在这个Root类上使用shared_ptr,如下所示:std::shared_ptr但是:我不希望我的所有类都从这个Root类继承,只是为了能够拥有这个共享指针有时我想返回一个指向std::vector或std::list或std::set的共享指针...显然不是从我的Root类继承的很奇怪,您似乎可以在void上创建一个shared_ptr并且这似乎可以正常工作,如下例所示:classX{public

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