boost::shared_ptr shared_from_this
需要將指針再構造為一個shared_ptr時, 可以讓類繼承自enable_shared_from_this; 然后類內部使用shared_from_this()生成一個shared_ptr。
不能直接將this構造為一個shared_ptr,因為有可能其他的shared_ptr已經包含了this; 這種情況下, 相當于使用raw pointer構造了多個shared_ptr、 會多次釋放。
P *p = new P;
shared_ptr p1(p);
shared_ptr p2(p);
error。。。。會導致p被多次delete。
轉
http://www.cnblogs.com/lzjsky/archive/2011/05/05/2037363.html
http://blog.csdn.net/salutlu/article/details/12515877
http://www.cnblogs.com/livingintruth/archive/2012/03/05/2367253.html
http://hi.baidu.com/cpuramdisk/item/7c2f8d77385e0f29d7a89cf0
我在寫asio過程中, 基本上都碰到過了。
1)? 同時也解釋了在構造函數中不能調用shared_from_this()的錯誤,我寫asio程序時想在構造中發起異步connect,結果運行出錯。。。 無意中招。
2)? 定義在棧上的對象、或者沒有使用shared_ptr管理的raw pointer, 無需繼承自enable_shared_from_this、不能調用shared_from_this。
asio::async_read(socket,...)
socket.async_read_some
兩者區別:
asio::async_read填充滿buffer或者符合指定條件才返回
socket.async_read_some讀到數據就返回。
from http://blog.csdn.net/hbhhww/article/details/7469923
總結
以上是生活随笔為你收集整理的boost::shared_ptr shared_from_this的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无状态设计的服务端
- 下一篇: boost ref, bind